`
deepfuture
  • 浏览: 4401985 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80084
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70101
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103411
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285931
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15019
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67609
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32177
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:46001
社区版块
存档分类
最新评论

haskell

阅读更多

http://www.haskell.org/ghc/下载地址

入门指南

 

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 教程和书籍,下面这些都是我们推荐的:

教程

  1. Yet Another Haskell Tutorial (English 简体中文)
  2. Haskell-Tutorial (English)
  3. A Gentle Introduction to Haskell (English)
  4. Haskell Kurs (德语)

课程

  1. Programming in Haskell (English)
  2. Functional programming (English, Español, Netherlands) (注意:它里面讲的是老版本的 Haskell。比如输入输出后来都改过)

 

 

分享到:
评论

相关推荐

    Get Programming with 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'...

    The Haskell Road to Logic, Maths and Programming. Second Edition(英文第二版)

    Haskell学习者的福音。《通向逻辑、数学、编程的Haskell之路》英文第二版 Long ago, when Alexander the Great asked the mathematician Menaechmus for a crash course in geometry, he got the famous reply ``...

    Haskell趣学指南---文字版.pdf

    Haskell是一种纯函数式编程语言,以其强大的类型系统和抽象能力而闻名。它由Haskell Brooks Curry的名字而来,由计算机科学领域多位专家共同设计,旨在成为一种更加健壮的Lisp语言。Haskell非常适合在金融、航天航空...

    Haskell教程(中文版)

    **Haskell教程(中文版)** Haskell是一种纯函数式编程语言,以其强大的类型系统、惰性求值和高阶函数特性而闻名。这本由Hal Daumé III编著并由乔海燕翻译的《Yet Another Haskell Tutorial》中文版,为初学者提供了...

    HaskellPart1_Haskell_

    **Haskell编程语言详解** Haskell是一种纯函数式编程语言,以其优雅的语法、静态类型系统和强大的编译器闻名。在本课程中,我们将深入探索Haskell的基础知识,了解其核心概念,以及如何利用这些特性来编写高效、...

    Haskell_Programming

    ### Haskell编程语言基础知识点概述 #### 一、Lambda与函数式编程基础 ##### 1.1 Lambda的概念 在Haskell编程中,“所有你所需要的只是Lambda”这句话强调了Lambda表达式的中心地位。Lambda表达式是一种匿名函数,...

    Real World Haskell PDF

    《Real World Haskell》是一本广泛认可的Haskell编程语言教程,旨在将这门函数式编程语言的理论与实践相结合,让读者能够在实际项目中运用Haskell。这本书的PDF版本是根据2015年3月1日的在线文档转制而成,确保了...

    haskell语言教程(learn you a haskell)

    《Haskell语言教程》是一本深受开发者欢迎的在线书籍,主要目标是帮助初学者深入理解Haskell这门纯函数式编程语言。Haskell以其强大的理论基础、严格的类型系统和静态类型而著称,它鼓励程序员编写简洁、清晰且易于...

    Haskell Cookbook.zip

    《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文撰写,以PDF格式提供,被压缩在一个名为"Haskell Cookbook.zip"的文件中。Haskell是一种纯函数式编程语言,以其强大的...

    Learning Haskell Data Analysis

    ### 学习Haskell进行数据分析 #### 一、前言 在《学习Haskell数据分析》这本书中,作者詹姆斯·丘奇(James Church)为读者提供了一种全新的方式来理解和处理数据集。本书不仅介绍了Haskell这门编程语言的基础知识,...

    Hutton A Programming in Haskell

    ### 关于《Hutton A Programming in Haskell》的知识点解析 #### 标题解析:Hutton A Programming in Haskell - **作者**:Graham Hutton - **版本**:2005年8月30日版 - **目标读者**:适合有一定编程经验的学习...

    Haskell 2010 Language Report

    Haskell 2010语言报告是Haskell编程语言的一个官方文档,详细阐述了Haskell语言的规范。Haskell是一种纯函数式编程语言,它提供了强大的类型系统和高度的抽象化能力。Haskell 2010语言版本是对早期Haskell 98标准的...

    guess_number.zip_Haskell_haskell 猜数字_haskell猜数字

    haskell实现的经典的猜数字游戏,猜一个四位数字,每猜一次数字返回A*B*表示猜中的数字和位置猜中的数字,本算法保证不超过8次,且不利用任何的筛选机制(意味着内存消耗几乎为0),经本机测试,猜出0123到9876(四...

    Haskell High Performance Programming

    ### Haskell High Performance Programming #### Identifying Bottlenecks 在高性能编程中,识别性能瓶颈是至关重要的第一步。这一章深入探讨了Haskell中的多种技术来帮助开发者理解并优化代码的执行效率。 - **...

    Haskell Cookbook 英文无水印pdf

    《Haskell Cookbook》是一本专为Haskell编程语言爱好者和开发者准备的实用指南。这本书以英文版的形式提供,没有水印,确保了阅读的清晰度和舒适性。Haskell是函数式编程领域的重要语言,以其纯函数、惰性求值和类型...

    Haskell 编程入门五星教程

    **Haskell 编程入门五星教程** Haskell 是一种纯函数式编程语言,以其严谨的数学基础、静态类型系统和惰性求值策略而闻名。它鼓励程序员采用声明式编程风格,强调数据流和计算的表达,而不是指令的执行顺序。本教程...

    haskell-mode emacs

    Haskell 是一种功能强大的、纯函数式的编程语言,以其优雅的语法和强大的类型系统闻名。Emacs 是一款经典的、高度可扩展的文本编辑器,它提供了丰富的插件和模式来支持各种编程语言的开发,包括 Haskell。在 Emacs ...

Global site tag (gtag.js) - Google Analytics