现在的位置: 首页 > 综合 > 正文

Haskell学习-初识

2017年04月06日 ⁄ 综合 ⁄ 共 1040字 ⁄ 字号 评论关闭


简介

haskell是一门函数式语言,区别于 c/c++这样的命令式语言,它是无状态的。在命令式语言中的函数,更多是一堆控制流程,电脑会按照命令逐个执行语句,而函数式编程中,则是告诉电脑“是什么”,在定义函数时,更像是“数学意义上的定义”,比如,定义阶乘是“从1到某数的所有整数相乘”。这种和状态无关的特性,使其没有副作用,因为在数学中,相同的函数参数求值,结果总是相同的。

 

函数式编程有很多不错的优点,上述的无副作用意味着可重入,并发编程非常有优势。

第二是惰性求值,即在真正需要结果前,不会被求值。这个也可以通过数学来解释,比如g(x)=2x,
f(x)=2g(x),
当我们给定 x = 2时,我们可以从最内层的函数代入,一步步算出最终结果,也可以直接换算出 f(x)=4x,一步算出结果。这种数学上的特性在 haskell中是这样体现的,比如一个函数
double,
它将一个 List中的元素都乘以 2,如果我求一个 List
8倍,则要写成 double(double(double(xs))),在命令式语言中,我们不得不遍历xs三遍,而在函数式编程中,这只是对数据的一系列变形,只要进行函数变换公式,遍历一次 List
即可。这还体现在在结果真正需要时,函数才会执行,haskell中可以定义无限长的 List,这样的 List
不会溢出,因为在我们在真正需要 List 某一位的数据之前,List
是不存在的。

第三是静态类型系统。我们在定义函数时,需要明确指定参数和函数类型,这样很大一部分错误便能在编译时被发现。当然,haskell的自动类型推导非常强大,我们可以精简程序不必每个量都手写类型。

 

安装

windows上安装也十分方便,去官网下载
setup
包,一路 next 就行,忘了要不要手动设置 path
了,这里主要把 bin 目录包含在 path
中。

 

最常用的是ghci交互模式(其他我暂时也不懂),这里可以交互执行,即时得到结果。也可以将
haskell
语句写在 .hs 脚本中,在 ghci
中用 :l xxx.hs调用。


PS C:\Users\lyy> ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :?  for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude>

抱歉!评论已关闭.