haskell学习笔记_函数

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

  1. 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 >= 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 =
pre n+ = 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 语句等。

上一篇:解决Win10服务主机本地系统网络受限


下一篇:Haskell语言学习笔记(85)Async