原帖说了什么不记得了,把重要的内容重发一下
主题 haskell 或者 monad(由主讲人定夺) 主讲 @luikore 时间 2013-01-08 晚 7:00 地址 杭州西溪路浙大科技园 c 栋 203 室
还是那句话,最好预先看看,否则效果会打折扣。
大家不见不散!!
标题...就是明天晚上吧?
有兴趣可以先装上 haskell-platform (linux 和 windows 见链接):
brew install haskell-platform
交互解释器 ghci (glasgow haskell compiler's interpreter)
# 可以行内用 :: 指定类型
alias ghci='ghci -XScopedTypeVariables'
源文件扩展名是 .hs
, literate programing style 的扩展名是 .lhs
. literate programing 是 RMS 在写 emacs 时发明的编程风格,代码和文档是反过来的,而且文档可以安排代码的顺序.
这是一个打印阶乘的程序 `fac.lhs`
首先我们引入 List 模块, 里面包含了我们想要用的库函数 foldl, 注意 `>` 开头的行会被编译
> import Data.List
`foldl` 相当于 ruby 里的 `reduce` 或者 `inject`, 但是 lambda 放前面而不是后面, 用来实现阶乘就像这样:
fac n = foldl (\x y -> x * y) 1 [1..n]
所有运算符都是 lambda / 函数, 上面的 lambda 中的乘号用前缀写法的话就是:
\x y -> (*) x y
这个 lambda 和 `(*)` 没什么区别, 直接用 `(*)` 好了, 代码就变成了:
> fac n = foldl (*) 1 [1..n]
打印结果:
> main = do { print (fac 12) }
编译执行:
ghc --make fac.lhs
./fac
呵呵,我还怕都忘了,准备一早上再提醒一下,看来大家都很主动积极啊 在 linux 上用 haskell 我是直接 apt-get 的,不知道有没有问题,不过写了几个函数执行 ghci 貌似没有问题
apt-get install ghc