Cn/Haskell 入门五步走
Revision as of 15:27, 14 December 2007 by Wangzhifen (talk | contribs)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Haskell 是一门通用型纯粹函数式编程语言。此篇将引导你尽快上路。
安装 Haskell
类似其他语言,Haskell 提供两种风格的处理方式:批处理(“编译器”)和交互式(“解释器”)。其中解释器可直接用于测试和计算,是初学者的好帮手。
GHC | 编译器和解释器(GHCi) | 可能是特性实现最全面的系统 |
Hugs | 解释器 | 高度可移植,轻量级 |
GHC 和 Hugs 都可以在 Windows 上工作,Hugs 似乎和此平台配合得更好。 在 Mac OS X 上安装 Haskell。
运行 Haskell
启动一个终端。如果安装了 GHC,在命令行输入 ghci (GHC 解释器的可执行文件名)。如果安装了 Hugs,输入 hugs。
$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.4, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base-1.0 ... linking ... done. Prelude>
现在出来个提示符,Haskell 系统静候佳音。
第一个 Haskell 程序
如果学习过其他编程语言,你的第一个程序可是 "Hello, world!"?我们这样做:
Prelude> "Hello, World!"
"Hello, World!"
Haskell 系统对此字符串求值,并输出结果。稍加修改,就可以直接输出到标准输出:
Prelude> putStrLn "Hello World"
Hello World
通过 Haskell 编译器,如 GHC,可以把代码编译成单独的可执行档。新建源文件 hello.hs,加入:
main = putStrLn "Hello, World!"
编译:
$ ghc -o hello hello.hs
运行(Unix 系统上用 ./hello,Windows 系统用 hello.exe):
$ ./hello Hello, World!
Haskell 计算器
做点有趣的事。你的第一个真正的 Haskell 程序是阶乘函数。回到解释器,定义之:
Prelude> let fac n = if n == 0 then 1 else n * fac (n-1)
以上定义了一个阶乘函数 fac。
附加参数,fac 跑起来:
Prelude> fac 42
1405006117752879898543142606244511569936384000000000
可喜可贺! 编程这般容易。注意,如果使用 Hugs,须从文件 fac.hs 加载 fac,其中 fac.hs 如下定义:
fac n = if n == 0 then 1 else n * fac (n-1)
如下运作:(对 GHCi 同样有效)
Hugs.Base> :load fac.hs
Main> fac 42
1405006117752879898543142606244511569936384000000000
亦可编译之,生成可执行档。编辑 fac.hs (使用模式匹配,程序更加可爱):
fac 0 = 1
fac n = n * fac (n-1)
main = print (fac 42)
然后编译运行:
$ ghc -o fac fac.hs $ ./fac 1405006117752879898543142606244511569936384000000000
太棒了!
更上一层楼
还有很多不错的 Haskell 教程和图书。推荐:
教程
- 十分钟学会 Haskell (简体中文)
- Yet Another Haskell Tutorial (English)
- A Gentle Introduction to Haskell (English, File:GentleFR.pdf)
图书、资料、教程的完整列表:
加入社区!
与 Haskell 社区成员交流: