您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
先学lisp好还是先学haskell好?
函数,代码,语言先学lisp好还是先学haskell好?
发布时间:2019-02-08加入收藏来源:互联网点击:
问题补充: 已经学了C++和Python,想学一门函数式语言来开拓(play)视野(zhuangbility),请问是先学scheme(或者CL之类的其他Lisp类语言)好,还是先学Haskell好?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
建议你先学Haskell。
《Haskell最美》这篇帖子简要介绍了Haskell的魅力。学习Haskell,益处多多。
首先,Haskell是一门很纯粹的函数式编程语言。而Lisp(Scheme、Common Lisp等)是多范式编程语言,函数式编程只是其中一部分。多能绝精,多虑绝决。就函数式编程而言,Haskell在这点上天生具有优势。
语法
Haskell具有Lisp没有的重要的特性。其中最重要的特性有:
1)模式匹配
举例,Haskell代码实现一个函数sum,参数为一个列表,输出列表元素相加。
sum [] = 0
sum (x:xs) = x + sum xs
第一行告诉我们,参数为空列表时,结果为零。第二行,x:xs是列表的模式,相当于Lisp中的
(cons x xs),xs为一个列表。作为对比,列出Scheme版本的sum函数代码。
(define (sum xs)
(if (null? xs)
0
(+ (car xs) (sum (cdr xs)))))
请自行对比Haskell代码和Scheme代码。哪个更简洁、更明了、更容易理解?
单凭模式匹配,Haskell就值得学习。
2)函数组合和函数应用操作符($)
下面的一行Haskell代码求自然数(从零开始)的平方根之和小于1000的个数。
length . takeWhile (<1000) . scanl1 (+) $ map (sqrt) [0..]
length,takeWhile, scanl1, map, sqrt都是函数。上述一行代码把这五个函数组合完成了计算任务。这段代码用到了三个语法特征:
部分函数partial function 函数组合function composition高阶函数higher order3) 强数据类型(type)和类型类(type class)
Lisp类语言是动态语言。与之相反,Haskell是强类型,有强大的类型类和类型推导。这决定了Haskell很多代码不需要显示声明数据的类型,靠系统自动推导就可以完成比C++还要严格得多的编译检查。这点绝对让题主眼界大开。
文化、系统和工具
Haskell有稳定、活跃的核心开发圈子,不受任何商业公司和机构控制,开源代码,文化上具有学术氛围。Haskell的实现有稳定可靠的编译器和工具链(ghc, ghci等)。
Lisp类语言历史悠久。活到现在的Lisp实现有common lisp, cheze scheme等。思科公司控制着cheze scheme。 common lisp的开源实现不活跃,商业实现价格昂贵。唯一对普通大众很友好的是源自Scheme的Racket语言。Lisp百花齐放,然而没有一枝花比得过Haskell。
喜欢就点赞。 更多精彩,请关注我
今日头条号/西瓜视频/抖音:IT之州
上一篇:因弄丢手机8岁男孩被妈妈打死,孩子生前两句话让检察官心碎,大家怎么看?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |