浏览 2118 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-26
最后修改:2009-03-26
1. 准备工作
官网下载 GHC ,大约有50M,然后阅读 Haskell in 5 steps
2. 准备之余
建一个目录,取名为“1”,进入这个目录
写 hello.hs main = print "hello"
写 fib.hs fib 0 = 0 fib 1 = 1 fib n = fib(n-1) + fib(n-2)
3. 跑程序
下载完毕,安装
编译hello.hs (编译示例) > ghc -o hello hello.hs > hello.exe
运行ghci (解释与交互示例) > ghci Prelude > :load fib.hs *Main > fib 10 89 > :q
4. 再跑一个高深点的程序
写parallel.hs(并行示例,`par`连接——并行运行,`pseq`连接——顺序运行) import Control.Parallel main = a `par` b `pseq` print (a + b) where a = fac 10 b = fac 20 fac 0 = 1 fac n = n * fac (n - 1) 编译并运行 -O2:优化等级2,即最牛x的优化, --make:不用写 make file 的make, -threaded:多线程支持 > ghc -O2 --make para.hs -threaded > para.exe
5. 总结
打开 ghc 的安装目录,转进 doc,打开 index.htm,ctrl+D 收藏(firefox),睡觉。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-26
话说你看fib.hs可以这样:
fib n = fibs !! (n + 1) where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) lazy满塞~ |
|
返回顶楼 | |
发表时间:2009-03-26
最后修改:2009-03-26
RednaxelaFX 写道 话说你看fib.hs可以这样:
fib n = fibs !! (n + 1) where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) lazy满塞~ 唔……好不容易才读懂 zipWith(+): [0,1,1,2,3,...] + [1,1,2,3,5,...] ------------------- [1,2,3,5,8,...] |
|
返回顶楼 | |
发表时间:2009-03-26
呃,后来想想貌似不用n+1,直接n就行,看fib到底定义为0开始还是1开始 =v=
我、我之前是为了配合你的fib 10 = 89才写了n+1的(泪奔 |
|
返回顶楼 | |
发表时间:2009-03-26
RednaxelaFX 写道 呃,后来想想貌似不用n+1,直接n就行,看fib到底定义为0开始还是1开始 =v=
我、我之前是为了配合你的fib 10 = 89才写了n+1的(泪奔 哈哈……上当了吧 |
|
返回顶楼 | |
发表时间:2009-03-26
night_stalker 写道 哈哈……上当了吧
呜呜,被骗了。NS这坏人 T T 那啥,fac也可以这样定义,虽然很废: fac n = facs !! n where facs = 1 : 2 : zipWith (\x y -> y * (y / x + 1)) facs (tail facs) 纯娱乐 XD 当然还是fold left来得正统些? fac n = foldl (*) 1 [1..n] |
|
返回顶楼 | |