您的位置:首页 > 其它

haskell学习笔记_函数

2013-08-16 11:59 393 查看
一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回。所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论:

condition expression

语法类似于if then else ;允许嵌套,但是每个if 必须对应一个else 否则语法报错。示例如下:

--单一示例: abs 函数

abs :: Int -> Int abs x = if x>= 0 then x else -x


  

--嵌套示例

signum :: Int -> Int
signum x =  if x > 0  then 1 else
if x == 0 then 0 else -1


2. Guarded equations

由一组成为guards的逻辑表达式组成,从上往下去try 每一个expression ,true则执行后面的语句(后面的语句不再执行),否则往下去try.Special case :otherwise 匹配所有的情况。如果没有匹配项,程序会报错(函数所有的分类语法都一样,如果没有匹配则会报错)。分类符号:“|” 读作 “such as”. 示例如下:

-- abs
abs :: Int -> Int
abs x |  x >= 0   x
otherwise  -x


3. Pattern matching


pattern matching 的定义不是很清晰。不过我自己所理解的pattern matching 函数类型是:(function name + Syntactic expression + return result )^ .Syntactic expression 支持 Tuple patterns 、List patterns Integer patterns 等等。

Integer patterns 支持一种 n+k的形式,n为Int variable , k 为 Int constant .示例如下:

pre : Int -> Int
pre 0  =  0
pre n+ 1  =  n



4 . Lambda expressions


匿名函数。示例如下:

add = λx -> (λy - >  x + y)



5 .Sections


In general,if ⊕ is an operator,then expressions of the form( ⊕ ),(x ⊕ ),and ( ⊕ y) for arguments x and y are called sections, whose meaning as functions can be formalised using lambda expressions as follows :

(⊕)   = λx → (λy → x ⊕ y)
(x ⊕) = λy → x ⊕ y
(⊕ y) = λx → x ⊕ y


还有一些别的在函数中使用的比如 where 语句用于定义函数中使用的一些变量、let it be 语句、case 语句等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: