haskell(17)

下面是一个2维向量长度比较的例子

vlencompare::(RealFloat a)=>(a,a)->(a,a)->Ordering
(x1,y1) `vlencompare` (x2,y2)
     |(sqrt (x1^2+y1^2)) == (sqrt (x2^2+y2^2)) =EQ
     |(sqrt (x1^2+y1^2)) > (sqrt (x2^2+y2^2)) =GT
 |(sqrt (x1^2+y1^2)) < (sqrt (x2^2+y2^2)) =LT


加载后运行

*Main> (12,18) `vlencompare` (-12,18)

EQ

*Main> (12,18) `vlencompare` (-12,-18)

EQ

*Main> (12,18) `vlencompare` (-12,16)

GT

*Main> (12,18) `vlencompare` (-12,1)

GT

*Main> (12,18) `vlencompare` (-10,1)

GT

*Main> (12,18) `vlencompare` (-10,16)

GT

*Main> (12,18) `vlencompare` (-18,26)

LT

13Where

Where构造的变量可以在全部函数中访问,包括所有的guards,我们也可以通过where对参数变量的计算进行简化。

vlencompare::(RealFloat a)=>(a,a)->(a,a)->Ordering

(x1,y1) `vlencompare` (x2,y2)

     | vec1== vec2 =EQ

     | vec1 > vec2 =GT

 | vec1 < vec2 =LT

 where  vec1 =(sqrt (x1^2+y1^2))

        vec2 =(sqrt (x2^2+y2^2))


14、Let

“let....in...”语句完成构造一个局部变量,其应用范围在in以内。

如,定义一个求向量长度的函数

vector3_len::(RealFloat a)=>(a,a,a)->a

vector3_len vec=

        let (x,y,z)=vec    

        in  sqrt (x^2+y^2+z^2)


加载并运行: 

*Main> vector3_len (12.44,19.12,22)

31.691134406959936

15、Case

编写一个将数字01转换为相应逻辑值的程序

“case...of...”可对同一表达式进行多个模式的匹配。

int2bool::Int->Bool

int2bool mynum =

    case mynum of 

0->False

1->True


加载后运行

*Main> int2bool 1

True

*Main> int2bool 0

False

*Main>




本博客所有内容是原创,未经书面许可,严禁任何形式的转载。

http://blog.csdn.net/u010255642


你可能感兴趣的:(数学,haskell)