-
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编程Haskell Programming
2019-11-13 20:20:17这是Haskell编程的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请每天检查此页面!!! -
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 Support
2021-01-07 15:33:58<div><p>We should add a Haskell extension until native support for VS Code extensions is ready. <p>Haskell vscode extension: https://github.com/alanz/vscode-hie-server Haskell language server: ... -
Haskell Gitter
2020-12-08 23:55:20<div><p>Haskell Gitter Community link</p><p>该提问来源于开源项目:haskell-infra/hl</p></div> -
Haskell bindings
2021-01-10 07:09:28<div><p>These Haskell bindings make large use of c2hs to generate much of the Haskell code, so Unicorn's <code>const_generator.py</code> is not used. <p>The emulator is based on the Either monad ... -
stylish-haskell, Haskell代码 prettifier.zip
2019-10-10 17:23:53stylish-haskell, Haskell代码 prettifier 时尚 haskell 简介简单的Haskell代码 prettifier 。 目标不是格式化文件中的所有代码,因为我发现这类工具经常是"别挡着路"。 然而,手动清理导入语句 等等 很快就会变得... -
Haskell Alternative
2020-12-09 05:32:00<div><p>A bit different approach for Haskell Starter Package. I have started working on it, before I found out there is already one implementation present, therefore my approach is little bit ... -
haskell技术文档
2019-02-18 10:18:03haskell技术文档 -
Programming in Haskell
2021-01-17 21:59:04Haskell is a purely functional language that allows programmers to rapidly develop software that is clear, concise and correct. This book is based on the author's experience of teaching Haskell for ... -
haskell-chart, haskell的2D 图表库.zip
2019-10-10 12:38:17haskell-chart, haskell的2D 图表库 图 haskell的2D 图表库进一步的信息可以在关联的 wiki中找到。 -
Haskell stack
2020-12-29 11:29:28<div><p>This adds a recipe for the stack tool. Stack is a cross-platform program for developing Haskell projects.</p><p>该提问来源于开源项目:conda-forge/staged-recipes</p></div> -
Haskell scanner
2020-11-24 16:21:09<div><p>Eric Thomas requested a Haskell scanner. <p>From Redmine: http://odd-eyed-code.org/issues/232</p><p>该提问来源于开源项目:rubychan/coderay</p></div> -
Haskell pluginprocess
2020-12-08 23:28:34<p>Executes Haskell Plugins in a separate process with libprocessplugin. As haskell plugins do not really work otherwise its directly integrated and not proxied via process, so it can be mounted ... -
haskell binding
2020-12-09 10:37:31So could you considere providing an haskell binding to elektra <p>thanks <p>Frederic [1] https://github.com/joeyh/propellor</p><p>该提问来源于开源项目:ElektraInitiative/libelektra</p></div> -
[Haskell] Rewrite Haskell syntax
2021-01-07 11:44:54<div><p>After working with Haskell a bit, I couldn't help but notice how poor the syntax highlighting for it was. It got the job done, but there were and still are several things blatantly missing... -
Haskell implementation
2020-11-29 00:21:07<div><p>Hi, I started a haskell implementation of the formality language a few months ago but ran out of bandwidth before I was able to complete it. It's here in case anyone want's to pick up ... -
dev-haskell/tls requires <dev-haskell/cryptonite-0.23, but haskell overlay contains dev-haskell/...
2020-12-09 06:40:47emerge -putDN, there is a package conflict because <code>dev-haskell/cryptonite-0.23::haskell</code> conflicts with <code>dev-haskell-/tls-0.3.10</code>. <p>I had to mask <code>>=dev-haskell/... -
Difference between haskell-lang/haskell-lang and haskell-infra/hl?
2020-12-09 10:38:00s the motivation for splitting haskell-infra/hl into an organization of its own? Are there re-implementation plans or something similar? I'm asking because I'm trying to figure out which one I... -
broken Haskell
2020-12-29 17:08:05<div><p>I just built from master and installed <a href="https://github.com/textmate/haskell.tmbundle">this bundle</a>. <p>When I type something like: <pre><code> stuff :: a -> a </code></pre> <p>I... -
cmake haskell
2020-12-08 23:21:08<p>Build Elektra with haskell enabled, same as our build jobs. Cmake issues the following error multiple times: <code>ls: cannot access '/home/jenkins/.cabal/lib': No such file or directory...
-
mpi4py 基本函数学习
-
春节灯笼Html代码实现+点击页面出现文字
-
UNLOCK.iso加密解密软件和狗的一些资料
-
Python:常用内置模块介绍 random 和 math
-
OpenMP详细用法,OMP太牛B了能够发辉多核CPU100的性能
-
stf二次开发-环境配置-node8安装
-
商业的本质——杰克·韦尔奇著
-
git 入门
-
第3章 入门程序、常量、变量
-
Laya 2.0 开发3D小游戏 入门教学
-
Java Web开发之Java语言基础
-
转行做IT-第5章 流程控制语句
-
Matplotlib scatter 散点图
-
环评考试还会继续使用报名承诺制吗?
-
python3 动态规划 leetcode 连续子数组的最大和
-
信息系统项目管理师考前必做170题.pdf
-
吴恩达《Machine Learning》笔记
-
转行做IT-第8章 类与对象、封装、构造方法
-
微信支付2021系列之扫码支付一学就会java版
-
Redhat6.5安装Oracle11g.docx