Haskell函数式编程之一-语言初体验
如果你是使用面向对像语言进行编程的程序员,那么你应该去了解掌握一门动态语言。而动态语言的魔力之一就是函数式编程。而要学习了解函数式编程,那么haskell是一个不错的选择。
Haskell是是一门纯函数式编程语言(purely functional programming language)。在其世界中函数是第一等对象。并且在haskell中没有赋值,例如你指派a的值为5,然后你无法再给a分配其它的值。所以你不能像命令式语言那样命令电脑“要做什么”,而是通过函数来描述出问题“是什么”。
作为一个纯的函数式编程语言,它支持惰性求值、模式匹配、列表解析、类型类、类型多态……
别着急,让我们慢慢来解开函数式编程的面纱。
安装Haskell
在terminal下输入brew install haskell-platform
即可。
使用Haskell
安装完毕后haskell platform的解释器GHC就已经在你的电脑上了。GHC可以解释执行Haskell脚本,即后缀名为.hs的文件。你可可以通过在terminal输入ghci
进入交互模式。
1 2 3 4 5 6 7 8 9 10 11 |
|
关于Haskell的编辑器你可以使用任何喜欢的编辑器:Vim、Emacs、Sublime、TextMate…..我比较喜欢Sublime。因为在Sublime自带Haskell的快捷编译执行。只需要按Ctrl+B来直接运行Scripts脚本。
在ghci交互模式下可以使用:l
命令来load一个Haskell脚本,然后就可以调用此脚本中的函数。我们先写一个’Hello world!’程序,然后通过ghci来load和调用.
1
|
|
1 2 3 4 5 |
|
如果对文件进行了修改,也可以直接通过:r
来重新加载文件。
Haskell的基本语法
加减乘除操作
1 2 3 4 5 6 7 8 9 10 |
|
注意对负数进行操作时要将其用()括起来,否则系统会报错。
判等与比较操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
控制流转
1 2 3 4 5 |
|
注意这里的条件判断中的else是不可以省略的,这样保证条件语句总会返回一个值。所以我们可以将整个if..then..else
pattern看做一个表达式。
如果在脚本文件中写的话不需要使用let
关键字。并且也可以采用另一个写法。
1 2 3 |
|
|表示或,otherwise关键字表示其它的情况。当然你也可以将这三行代码写成一行,这样也是能够正常运行的。分成三行只是为了更加可读。
还有第三种写法,实际上与面对对象语言中的switch…case
语句有些类似。
1 2 3 |
|
这和第二种写法很类似。其实第二种写法本质上就是case
语句,它只是case
语句的一个语法糖而已。
另外,在Haskell中是没有各种循环语句的,如果要实现相似的特性当然要使用递归了。
第二节中,我们会讨论这个问题。
出处:http://www.cnblogs.com/huang0925
黄博文的地盘
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!