函数式程序设计(一)——初⻅函数式思维
目录
列表的操作
|
|
函数应用
在Haskell中,函数应用使用空格来表示,乘法用星号*来表示。
|
|
Mathematics | Haskell |
---|---|
f(x) |
f x |
f(x, y) |
f x y |
f(g(x)) |
f (g x) |
f(g(x), y) |
f (g x) y |
f(x)g(y) |
f x * g y |
Haskell脚本
用户自己定义的函数在一个script中,由一系列定义组成的文本文件,后缀名习惯用.hs
。
当开发一个Haskell脚本时,保持两个窗口的打开是很有用的,一个是运行脚本的编辑器,另一个是运行GHCi。
|
|
终端中运行ghci test.hs
,然后输入double 3
,得到6
,输入quadruple 3
,得到12
。
我们不关闭GHCi,然后在test.hs
中添加阶乘函数和求均值函数:
|
|
注意
div
是用反引号括起来的,而不是正引号。x ``f`` y
只是f x y
的语法糖。
GHCi不会自动检测到脚本已经被改变,所以在使用新的定义之前,必须执行一个重新加载命令:reload
。
|
|
常用GHCi命令
命令 | 作用 |
---|---|
:load name |
加载脚本name |
:reload |
重新加载脚本 |
:set editor name |
设置编辑器为name |
:edit name |
编辑脚本文件name |
:edit |
编辑当前脚本 |
:type expr |
显示表达式expr的类型 |
:? |
列出所有命令 |
:quit |
退出GHCi |
函数式思维
使用数学中的函数作为求解信息处理问题的基本成分。
- 从零开始定义一些基本函数
- 把已有的函数组装起来,形成新的函数
自然数上的 fold
函数
plus
、mult
、expn
这三个函数之间存在共性,这种共性可以被封装在一个函数中。
可知
给定函数和值,令,则由上述定义可知:
注意
从另一个角度理解函数:
- 给定一个自然数,可知:
- 已知,可知:
利用foldn
函数,可以对plus
、mult
、expr
进行更简洁的定义:
fact
函数
为了使用foldn
函数定义fact
和fib
函数,首先引入两个辅助函数:
fact
函数定义如下:
fib
函数
序列(List)以及序列上的fold
函数
TBD
List 相关函数的重定义
TBD
一种排序算法
TBD