大家好,欢迎来到IT知识分享网。
Haskell语言,确实美。美在四字,纯、形、严、强。
纯
致纯之美。 Haskell的主设计师Simon Peyton说,“Haskell竭尽全力不成功”。他的意思是,Haskell从来不打算成为工业界主力编程语言,而是专心探索计算和编程的本质,宁愿成为计算机科学家和少数知音程序员手中的探索锤子,而不愿做工业界掌中的摇钱树。生而至纯、初心不改的Haskell,难道不美吗?
形
形式美。Haskell从语法上至少去除了五个影响视觉效果和阅读理解的东西,从而,使代码显得不仅简短而且表达力强。
(一)C/C++体系带来的分号和大括号对;
(二)Lisp体系的括号对;
(三)函数定义中的括号和分割参数的逗号;
(四)用模式匹配去除了嵌套条件。
(五)强类型和类型推导。
我们看一个示例:定义一个函数,输入一个整数,输出整数各位数之和,忽略正负号。比如,设定数为12345,那么这个数的个位数之和为1 + 2 + 3 + 4 + 5 = 15。
Haskell实现代码如下。注:以字符–之后的语句为注释
--输出整数各位数之和 sum_digits = sum . map digit . show -- 定义函数digit,此处也展示了Haskell的一个重要特性,模式匹配 -- 输入字符'0'到‘0’,输出对应的数 digit '0' = 0 digit '1' = 1 digit '2' = 2 digit '3' = 3 digit '4' = 4 digit '5' = 5 digit '6' = 6 digit '7' = 7 digit '8' = 8 digit '9' = 9 digit _ = 0
我们定义函数名为sum_digits。等号=后面定义函数体。函数体非常简单,包含了sum,map和show,她们都是Haskell的库函数。
show函数:输入转化为字符串
map函数:对列表中的每一个元素施加digit函数。digit函数为自定义函数,将字符转化为对应数,其他字符转为零。
sum函数:累加列表各元素
函数题代码从右往左阅读。稍加训练,就看得懂sum_digits函数定义。
严
严格编译。Haskell的类型推导系统和强类型使得代码在编译时受到最严格的审核,意图尽早捕捉和发现错误和缺陷。严格的审查不仅使代码具有更少的错误,更低的出错概率,而且迫使程序员在构思和构建程序时从类型上一直保持一致性。
一般来说,代码通过Haskell编译器编译的机率远小于其他主流语言,然而一旦顺利通过编译,Haskell代码的正确率相比之下是最高的。这是Haskell备受尊崇的原因之一。
强
强悍的功能。Haskell的强类型,类型自定义和类型推导,尤其是类型推导,使Haskell代码不用OOP面向对象的方式,就可用更精简更灵活的方式实现类似OOP的效果。
函数在Haskell里是最重要的概念,Haskell作为函数式编程的范例,整个核心理念建立在lambda函数计算上,运用逻辑学和数学,将函数抽象为更高级的形式,以容易书写,方便阅读的设计,让函数在整个Haskell中从底层到最上面表达层贯通一致,可组合,可传递(传递的不仅是函数本身,还包括函数所处的环境)。从使用者角度,类型和函数是Haskell代码最重要的环节。思考一个问题的解决方案,一个Haskell程序员,自然而然会采用与其他工业界主流程序设计语言不同的思维:从类型着手,从小函数起步,从小往大,从下往上演绎代码。你看sum_digits函数是由四个小函数组合而成的。sum、map、digit和show。
类似Python或者Perl6,Haskell系统拥有REPL环境。编写和验证代码变得既直接又方便。
Haskell对函数、REPL和编码范式极其类似Lisp或者Scheme、Racket。
总而言之,Haskell很美。代码为证。
sum_digits = sum . map digit . show
美从来只展露给有准备的眼睛。
去接近Haskell吧,她从不拒绝勇敢者。
喜欢就点赞。 更多精彩,请关注我
今日头条号/西瓜视频/抖音:IT之州
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/172477.html