论坛首页 入门技术论坛

[准翻译][精心提炼,绝对清纯] Haskell in 5 steps

浏览 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),睡觉。

   发表时间:2009-03-26  
话说你看fib.hs可以这样:
fib n = fibs !! (n + 1)
  where fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

lazy满塞~
0 请登录后投票
   发表时间: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,...]
0 请登录后投票
   发表时间:2009-03-26  
呃,后来想想貌似不用n+1,直接n就行,看fib到底定义为0开始还是1开始 =v=
我、我之前是为了配合你的fib 10 = 89才写了n+1的(泪奔
0 请登录后投票
   发表时间:2009-03-26  
RednaxelaFX 写道
呃,后来想想貌似不用n+1,直接n就行,看fib到底定义为0开始还是1开始 =v=
我、我之前是为了配合你的fib 10 = 89才写了n+1的(泪奔


哈哈……上当了吧
0 请登录后投票
   发表时间: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]
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics