入门指南
Haskell 是一种通用的纯函数编程语言。这个页面将帮助你尽快迈入 Haskell 的大门。
第一步:为什么要学习 Haskell?
John Hughes 写了一篇很好的论文:Why Functional Programming Matters。
第二步:安装 Haskell
Haskell 和其它大多数语言一样,有两种执行方式:批量执行的编译方式,和交互执行的解释方式。在交互式环境下,你可以直接在命令行输入你想要计算的表达式,这是一种做实验的好方法。
GHC |
支持编译和解释方式(GHCi) |
可能是特性最全的环境 |
Hugs |
仅支持解释方式 |
不过相比 GHC 要轻巧得多 |
GHC 和 Hugs 都在 Windows 上运行。Hugs 是 windows 平台上最好的解释器。如果你想在 Mac OSX 上安装的话,请参看 这里 (flw 注:GHC 和 Hugs 在 Debian 下都有相应的包,其它 Linux 平台下想必也有。支持 RPM 的系统可以从 www.rpmfind.net 上找找看。当然也可以从官方网站上下载源码包编译安装。)
第三步:你的第一个 Haskell 程序
请注意,下面这个例子不能在 Hugs 下运行(截止到 20050308 为止),因为 Hugs 不支持在命令行定义函数。你必须把定义放到一个源代码文件里。
如果你学过其它编程语言的话,那你一定编过“Hello world”程序。不过在 Haskell 中,你的第一个程序不是“Hello world”,而是一个阶乘函数。
启动解释器
打开一个终端。如果你安装了 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>
写第一个程序
在 GHCi 中,我们既可以从一个源代码文件中装载程序,也可以直接在命令提示符下定义。试试下面的这个:
Prelude> let fac n = if n == 0 then 1 else n * fac (n-1)
这样就定义了一个叫做 fac 的函数,它可以计算一个整数的阶乘(第四步中我们再来仔细讨论它)
运行它
输入 fac 12,这样可以把 12 作为参数传递给 fac 函数。
*Main> fac 12
479001600
大功告成!你现在已经成功地运行了你的第一个 Haskell 程序。
但我还是想要打印 "Hello World"!
在进入长篇大论之前,先来看看 Haskell 版本的 “Hello World”:
putStrLn "Hello World"
在 GHCi 中输入上面的文字,然后你就可以得到你想要的效果。
如果你想用一个可执行文件来打印这句话的话,你可以把下面这段文字保存到 hello.hs 文件中:
module Main where
main = putStrLn "Hello World"
编译器要求必须得有一个叫做 main 的函数,这样它便知道程序该从何处开始执行。用命令 ghc hello.hs -o hello 来编译它,然后运行就可以了。Unix/Linux 下用 ./hello 来运行,windows 下用 hello.exe 来运行。
长话短说
函数式编程有一个显著的特点就是所有的工作都用“函数”来完成。函数是没有副作用(flw 注:side effects,也译作“边际效应”)的。它们返回一个和参数相关的值。为了进行输入输出(比如往屏幕上打印一句话),你可以想象成函数可以拥有一个名为“world”的参数,这个参数包括了所有的外部状态,然后函数返回一个修改过了的 world(比如屏幕上多了“Hello World”这几个字),而这个修改过了的 world 又可以带到随后的函数中。
Haskell 提供一些类似的东西,而且更加省事:它把函数和现实世界的相互影响,称作 IO 行为。这样当一个函数把一个数字转换成可打印字符串时,它变具有类型 Int -> String。而一个从终端上读取指定长度的字符串的函数也许会具有类型 Int -> IO String,它的意思是说,给函数一个整数,它可以返回一个“从终端上读取一个字符串”的 IO 行为。这也就是为什么 main 函数具有类型 IO 的原因——你通常希望你的程序能够和现实世界交互,那样的话就它就得是一个 IO 行为。
说起来有些拗口。但其实和其它的编程语言没有什么分别,只不过其它的语言把它们叫做“语句”和“表达式”罢了。这样的好处是 Haskell 有一个坚实的框架来处理这些事,它的名字就叫“IO Monad”。
如果你想要一个关于如何在 Haskell 中进行 IO 工作的快速介绍的话,我建议你看看 IO 介绍
第四步:接下来该干什么?
有很多不错的 Haskell 教程和书籍,下面这些都是我们推荐的:
教程
- Yet Another Haskell Tutorial (English 简体中文)
-
Haskell-Tutorial (English)
-
A Gentle Introduction to Haskell (English)
-
Haskell Kurs (德语)
课程
-
Programming in Haskell (English)
- Functional programming (English, Español, Netherlands) (注意:它里面讲的是老版本的 Haskell。比如输入输出后来都改过)
分享到:
相关推荐
Get Programming with Haskell introduces you to the Haskell language without drowning you in academic jargon and heavy functional programming theory. By working through 43 easy-to-follow lessons, you'...
Haskell学习者的福音。《通向逻辑、数学、编程的Haskell之路》英文第二版 Long ago, when Alexander the Great asked the mathematician Menaechmus for a crash course in geometry, he got the famous reply ``...
Haskell是一种纯函数式编程语言,以其强大的类型系统和抽象能力而闻名。它由Haskell Brooks Curry的名字而来,由计算机科学领域多位专家共同设计,旨在成为一种更加健壮的Lisp语言。Haskell非常适合在金融、航天航空...
**Haskell教程(中文版)** Haskell是一种纯函数式编程语言,以其强大的类型系统、惰性求值和高阶函数特性而闻名。这本由Hal Daumé III编著并由乔海燕翻译的《Yet Another Haskell Tutorial》中文版,为初学者提供了...
**Haskell编程语言详解** Haskell是一种纯函数式编程语言,以其优雅的语法、静态类型系统和强大的编译器闻名。在本课程中,我们将深入探索Haskell的基础知识,了解其核心概念,以及如何利用这些特性来编写高效、...
### Haskell编程语言基础知识点概述 #### 一、Lambda与函数式编程基础 ##### 1.1 Lambda的概念 在Haskell编程中,“所有你所需要的只是Lambda”这句话强调了Lambda表达式的中心地位。Lambda表达式是一种匿名函数,...
《Real World Haskell》是一本广泛认可的Haskell编程语言教程,旨在将这门函数式编程语言的理论与实践相结合,让读者能够在实际项目中运用Haskell。这本书的PDF版本是根据2015年3月1日的在线文档转制而成,确保了...
《Haskell语言教程》是一本深受开发者欢迎的在线书籍,主要目标是帮助初学者深入理解Haskell这门纯函数式编程语言。Haskell以其强大的理论基础、严格的类型系统和静态类型而著称,它鼓励程序员编写简洁、清晰且易于...
《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文撰写,以PDF格式提供,被压缩在一个名为"Haskell Cookbook.zip"的文件中。Haskell是一种纯函数式编程语言,以其强大的...
### 学习Haskell进行数据分析 #### 一、前言 在《学习Haskell数据分析》这本书中,作者詹姆斯·丘奇(James Church)为读者提供了一种全新的方式来理解和处理数据集。本书不仅介绍了Haskell这门编程语言的基础知识,...
### 关于《Hutton A Programming in Haskell》的知识点解析 #### 标题解析:Hutton A Programming in Haskell - **作者**:Graham Hutton - **版本**:2005年8月30日版 - **目标读者**:适合有一定编程经验的学习...
Haskell 2010语言报告是Haskell编程语言的一个官方文档,详细阐述了Haskell语言的规范。Haskell是一种纯函数式编程语言,它提供了强大的类型系统和高度的抽象化能力。Haskell 2010语言版本是对早期Haskell 98标准的...
haskell实现的经典的猜数字游戏,猜一个四位数字,每猜一次数字返回A*B*表示猜中的数字和位置猜中的数字,本算法保证不超过8次,且不利用任何的筛选机制(意味着内存消耗几乎为0),经本机测试,猜出0123到9876(四...
### Haskell High Performance Programming #### Identifying Bottlenecks 在高性能编程中,识别性能瓶颈是至关重要的第一步。这一章深入探讨了Haskell中的多种技术来帮助开发者理解并优化代码的执行效率。 - **...
《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文版的形式提供,没有水印,确保了阅读的清晰度和舒适性。Haskell是函数式编程领域的重要语言,以其纯函数、惰性求值和类型...
**Haskell 编程入门五星教程** Haskell 是一种纯函数式编程语言,以其严谨的数学基础、静态类型系统和惰性求值策略而闻名。它鼓励程序员采用声明式编程风格,强调数据流和计算的表达,而不是指令的执行顺序。本教程...
Haskell 是一种功能强大的、纯函数式的编程语言,以其优雅的语法和强大的类型系统闻名。Emacs 是一款经典的、高度可扩展的文本编辑器,它提供了丰富的插件和模式来支持各种编程语言的开发,包括 Haskell。在 Emacs ...