-
Haskell
2020-12-08 19:36:13<div><p>Please create a tcso for haskell</p><p>该提问来源于开源项目:gautamkrishnar/tcso</p></div> -
haskell
2010-03-16 15:48:08Haskell 是一种通用的纯函数编程语言。这个页面将帮助你尽快迈入 Haskell 的大门。 [编辑] 第一步:为什么要学习 Haskell? John Hughes 写了一篇很好的论文:Why Functional Programming Matters。 [编辑] ...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 教程和书籍,下面这些都是我们推荐的:
[编辑]教程
- 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。比如输入输出后来都改过)
-
Haskell
2008-06-30 11:18:00Haskell 开放分类: 计算机语言、计算机技术、编程、互联网、电脑Haskell是一种纯函数式编程语言,它的命名源自美国数学家Haskell Brooks Curry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。...Haskell 开放分类: 计算机语言、计算机技术、编程、互联网、电脑Haskell是一种纯函数式编程语言,它的命名源自美国数学家Haskell Brooks Curry,他在数学逻辑方面上的工作使得函数式编程语言有了广泛的基础。Haskell语言是1990年在编程语言Miranda的基础上标准化的,并且以Lambda-Calculi(兰姆达演算)为基础发展而来.这也是为什么Haskell语言以希腊字母Lambda作为自己的标志.Haskell语言的最重要的两个应用是Glasgow Haskell Compliler(GHC)和Hugs(一个Haskell语言的编译器).特式是利用很简单的叙述就可以完成 Linked List、矩阵等数据结构。 发展在80年代末已经出现了一些函数式编程语言,它们各有优缺点.为了使它们在科研上有一种统一的研究和发展的基础,应该有一种标准化的全新的语言使函数式编程语言在此基础上实现统一。接下来有人想以Miranda作为此项工作的出发点(而Miranda的开发者却对此项工作并不感兴趣)。就在这种背景下Haskell 1.0于1990年被公布。 这种语言的最新版本是在原来版本的基础上经过修改的变体(Haskell-98-Standard 于1999年)。Haskell是现如今最广泛被用于研究的一种函数语言。现在以Haskell为基础的语言衍生物有很多,它们是:并行Haskell,扩充Haskell(旧名Goffin), Eager Haskell, Eden, DNA-Hakell 和面向对象的变体(Haskell++, O'Haskell, Mondrian)。另外Haskell还被作为在新语言设计时的样板,例如Python中的Lambda标记语句。
-
haskell-源码
2021-03-31 09:34:22haskell -
fd-haskell:我对haskell的haskell配置-源码
2021-02-12 03:25:55fd-haskell:我对haskell的haskell配置 -
Haskell编程Haskell Programming
2019-11-13 20:20:17这是Haskell编程的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请每天检查此页面!!! -
Haskell:Haskell脚本-源码
2021-02-20 08:21:48哈斯克尔 Haskell脚本 -
Haskell:Haskell练习以配合“ Haskell编程”一书-源码
2021-03-31 00:20:39Haskell:Haskell练习以配合“ Haskell编程”一书 -
Haskell-Programming:Haskell作业-源码
2021-03-30 15:13:10Haskell编程 Haskell作业 -
haskell报告:Haskell语言报告-源码
2021-02-04 03:09:44haskell报告:Haskell语言报告 -
learn-haskell:学习haskell-源码
2021-04-05 02:21:59学习哈斯克尔 学习haskell 资料来源 向您了解Haskell( ) 学习Haskell( ) -
Haskell-Practice:Haskell脚本练习-源码
2021-03-30 04:58:33Haskell-Practice:Haskell脚本练习 -
haskell ghc插图:haskell ghc插图-源码
2021-02-04 03:32:52haskell ghc插图:haskell ghc插图 -
haskell-multihash:Multihash Haskell实现-源码
2021-02-03 03:30:13haskell-multihash:Multihash Haskell实现 -
haskell:Recursos de Haskell-源码
2021-02-02 20:48:01Haskell自由档案库 瓜德诺昂哈斯克尔 定义,实用的函数,系统的构造函数和函数。 不实际的实际。 康乃狄克州女性皮肤病概论介绍,伊斯库达和。 Tambiénse incluyen 。 介绍Haskell 洛斯底里诺斯(Losprimeros)... -
haskell入门
2015-05-02 16:26:53haskellhaskell
haskell交流群->434427410
入门
haskell安装(for mac)
安装ghc(haskell的编译器)
brew install ghc
安装cabal(haskell的包管理工具,类似python的pip,ruby的gem)brew install cabal-install
hello world
新建文件xppiao.hs
main = putStrLn "Hello, World!"
编译ghc xppiao.hs -o xppiao
运行./xppiao
相关特性
类型
- 类型安全(type safe) -> 所有类型错误都会在编译阶段被发现
- 内建类型
List Tuple Integer Char
- 内建类型
- 多态(polymorphic function) -> 函数可以接受不同的参数
- 自定义类型(User-Defined Types) -> 关键词
data
data Color = Red | Green | Blue | Indigo | Violet
- 类型安全(type safe) -> 所有类型错误都会在编译阶段被发现
小例子
快排的定义
quicksort [] = [] quicksort (x:xs) = quicksort [y | y <- xs, y<x ] ++ [x] ++ quicksort [y | y <- xs, y>=x]
length的定义
:: [a] -> Integer length [] = 0 length (x:xs) = 1 + length xs
相关资源
文档
Haskell the hard way
haskell cookbook
基本语法
文档
基本概念实践
FP课程
haskell的99个问题
haskell Quiz
48小时写一个scheme图书
-
haskell-mooc:Haskell MOOC赫尔辛基大学-源码
2021-02-04 16:26:33haskell-mooc:Haskell MOOC赫尔辛基大学 -
ejdb2haskell:EJDB2 Haskell绑定-源码
2021-02-04 15:43:00ejdb2haskell:EJDB2 Haskell绑定 -
lsp-haskell:lsp-mode haskell-源码
2021-02-04 03:34:48lsp-haskell:lsp-mode haskell -
fashion-haskell:Haskell代码修饰符-源码
2021-02-04 03:30:53fashion-haskell:Haskell代码修饰符 -
arrayfire-haskell:Haskell绑定到ArrayFire-源码
2021-02-04 03:11:41arrayfire-haskell:Haskell绑定到ArrayFire -
haskell-wasm:Haskell WebAssembly工具包-源码
2021-01-31 13:50:48haskell-wasm:Haskell WebAssembly工具包 -
haskell:官方Gentoo Haskell叠加-源码
2021-03-18 05:51:14Gentoo Haskell项目 最快的开始 首先,让我们启用Gentoo Haskell叠加层。我们可以使用eselect-repository方法: # Install eselect-repository if you don't already have it emerge app-eselect/eselect-...