在这里总结一下我遇到的Haskell惯用法:
列表后跟两个感叹号和一个index,表示取出该列表中位于该index的元素。
GHCi中的一些宏命令:
:cd 更改当前目录
:load 或者 :l 加载module(hs文件)
:reload 或者 :r 重新加载最近一次加载的module文件
:type 或者 :t 显示后面表达式的类型
:help 列出常用的GHCi命令
Haskell中有Range这个类型,比如
let a = [1..10]
a这就是一个[1,2,3,4,5,6,7,8,9,10]的list,这个list等于[1..10]这个range
定义一个无限长度的list是这样写:
let a = [1..]
后面没有上线所以这个list就无限长
再介绍一个函数:
take 10 a
取出a这个list中的前10个元素
Haskell的一个语言特性是[color=darkred]惰性求值[/color],
怎么体现Haskell的惰性呢?
我们刚才不是定义了一个无限长的List么?let a = [1..]
由于a没有定义上限,所以计算它的长度是永远也计算不完的,取a的元素也是取不尽的,
这样我们用take方法取a的前1000个元素,当你取的时候计算机就给你计算出这个range的前1000个元素,当你要取到1001个元素的时候,它再给你计算出第1001个元素,如果你不取,那些元素就是不存在的,这就是惰性。
[a,b,c] !! 1
列表后跟两个感叹号和一个index,表示取出该列表中位于该index的元素。
GHCi中的一些宏命令:
:cd 更改当前目录
:load 或者 :l 加载module(hs文件)
:reload 或者 :r 重新加载最近一次加载的module文件
:type 或者 :t 显示后面表达式的类型
:help 列出常用的GHCi命令
Haskell中有Range这个类型,比如
let a = [1..10]
a这就是一个[1,2,3,4,5,6,7,8,9,10]的list,这个list等于[1..10]这个range
定义一个无限长度的list是这样写:
let a = [1..]
后面没有上线所以这个list就无限长
再介绍一个函数:
take 10 a
取出a这个list中的前10个元素
Haskell的一个语言特性是[color=darkred]惰性求值[/color],
怎么体现Haskell的惰性呢?
我们刚才不是定义了一个无限长的List么?let a = [1..]
由于a没有定义上限,所以计算它的长度是永远也计算不完的,取a的元素也是取不尽的,
这样我们用take方法取a的前1000个元素,当你取的时候计算机就给你计算出这个range的前1000个元素,当你要取到1001个元素的时候,它再给你计算出第1001个元素,如果你不取,那些元素就是不存在的,这就是惰性。