标题...就是明天晚上吧?
有兴趣可以先装上 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