11、模式匹配
模式匹配主要用来定义一些数据必须遵循的规则,根据他们来解析数据。在定义函数的时候,可以为不同的模式定义不同的函数体。
我们在mytest.hs中定义一个函数mynum,为不同的参数定义不同的实现
--pattern matching
mynum :: (Integral a)=>a->String
mynum 1="one"
mynum 2="two"
mynum 3="three"
mynum 4="four"
mynum 5="five"
mynum 6=">five"
mynum x="not between 1~6"
加载后运行
*Main> :l H:/my_docs/mytest.hs
[1 of 1] Compiling Main ( H:\my_docs\mytest.hs, interpreted
Ok, modules loaded: Main.
*Main> mynum (-10)
"not between 1~6"
*Main> mynum (9)
"not between 1~6"
*Main> mynum 1
"one"
*Main> mynum 8
"not between 1~6"
*Main> mynum 6
">five"
*Main>
再定义一个累加函数
--pattern matching
mysum :: (Integral a)=>a->a
mysum 0=0
mysum n=n + mysum (n-1)
加载后运行
*Main> :l H:/my_docs/mytest.hs
[1 of 1] Compiling Main ( H:\my_docs\mytest.hs, interpreted )
Ok, modules loaded: Main.
*Main> mysum 6
21
*Main> mysum 100
5050
*Main> mysum 3
6
*Main> mysum 2
3
当参数与函数定义的参数规则匹配时,则直接调用这个函数相应的实现,否则调用函数的其它匹配。
比如:
mysum 0=0
mysum n=n + mysum (n-1)
当参数与0匹配时,即为0时,则调用相应的实现,返回0,否则将与mysum n中的参数相匹配,返回n + mysum (n-1),实现递归。