haskell学习笔记_函数
2013-08-16 11:59
393 查看
一开始学习函数式编程语言就被告知函数式编程语言是一种“定义式”的语言,而不是一种命令式的语言,在学习haskell的函数语法时,此感觉更加强烈,haskell的函数定义倾向于一种类似C++里面的switch /case 的语义,将函数所处理的事情分类,然后定义好每个分类该如何返回。所以我的函数笔记主要就haskell函数里的几种分类情况进行讨论:
condition expression
语法类似于if then else ;允许嵌套,但是每个if 必须对应一个else 否则语法报错。示例如下:
2. Guarded equations
由一组成为guards的逻辑表达式组成,从上往下去try 每一个expression ,true则执行后面的语句(后面的语句不再执行),否则往下去try.Special case :otherwise 匹配所有的情况。如果没有匹配项,程序会报错(函数所有的分类语法都一样,如果没有匹配则会报错)。分类符号:“|” 读作 “such as”. 示例如下:
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 .示例如下:
4 . Lambda expressions
匿名函数。示例如下:
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 :
还有一些别的在函数中使用的比如 where 语句用于定义函数中使用的一些变量、let it be 语句、case 语句等。
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 语句等。
相关文章推荐
- Linux学习笔记 - Shell 函数的使用
- C++ primer第二次阅读学习笔记(第7章:函数)
- JavaScript面向对象学习笔记——函数、匿名函数、回调函数、自调函数
- python 学习笔记9-----函数
- C++primer学习笔记-----6.1函数基础
- msp430学习笔记之中断处理函数
- Python学习笔记---理解zip()函数
- [php学习笔记]与类有关的魔术方法、魔术常量、系统函数
- Python学习笔记 - 3.函数
- 《JavaScript 语言精粹》 学习笔记 —— 第四章 函数
- 【OpenCV学习笔记】【函数学习】五(颜色空间转换cvCvtColor()函数)
- python的函数装饰器学习笔记
- 黑马程序员——Swift学习笔记:函数
- Javascript学习笔记之函数重载和类型检查
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- C++ Primer 学习笔记_62_满载操作符与转换 -调用操作符和函数对象
- 函数模版与类模版简单实例--学习笔记
- Python学习笔记:列表(list)有关函数
- C程序设计语言(K&R)学习笔记--3.函数、作用域、内部变量与外部变量
- javase学习笔记-----函数