12、守卫(guards)
模式匹配针对的是确定值,而守卫(guards)则测试值的特性是true还是false,守卫更适合需要对参数运用复杂的条件表达式情况。
numtest ::(Num a,Ord a)=>a->String numtest testnum |testnum <=100 ="<=100" |testnum <=1000 ="<=1000" |testnum <=10000 ="<=10000" |otherwise =">10000"
加载后运行。
*Main> numtest 10
"<=100"
*Main> numtest 1000
"<=1000"
*Main> numtest 10000
"<=10000"
*Main> numtest (-1000)
"<=100"
*Main> numtest 100000
">10000"
再来看一个解一元二次方程的例子,只有一个未知数且未知数最高次数为2的整式方程叫做一元二次方程,其一般形式为(a≠0)。
求根的公式是
当有两个不相等的实数根,等于0时,有2个相等的实数根,否则是下面两个复数根:
完成这个任务,我们需要装载复数模块,装载模块的语法为: import 模块名 , 复数模块的名字是Data.Complex。
我们在ghci中可以直接使用:m +/- 模块名的方式加载或释放模块。比如:
Prelude> :m +Data.Complex
Prelude Data.Complex> :m -Data.Complex
Prelude>
也可同时装载和释放多个模块
Prelude> :m +Data.Complex Data.List
Prelude Data.Complex Data.List> :m -Data.Complex Data.List
Prelude>
所有装载模块的函数可以在全局命名空间使用。
复数的表示方式是:实部:+虚部,比如5+12.8i可在haskell中表示为:
Prelude> :m +Data.Complex
Prelude Data.Complex> 5 :+12.8
5.0 :+ 12.8
Prelude Data.Complex>
关于数字的类型类,haskell主要有:
Integral:包括Int和Integer类型
RealFloat:包括Float和Double 类型
RealFrac:包括RealFloat类型类,Ratio类型是该类型类的成员
Floating:包括 RealFloat类型类,Complex类型是该类型类的成员
Real:包括Integral和RealFrac类型类
Fractional:包括RealFrac和Floating类型类
Num:包括Real和Fractional类型类