(一)初识Haskell
背景
Haskell 是一种高级的纯函数式编程语言,接触它单纯是因为有一门课叫做函数编程。莫斯科国立大学的老师没有讲义和教材,所以想学习的时候记录一下。我是用Ubuntu 20.04进行学习的。
安装
GHCup 是通用语言Haskell的安装程序,我个人使用GHCup进行安装,感觉官网已经写得很清楚了,如果有掘友反应需要中文版的话,我后续再进行补充。
进入 ghc 的交互模式
很简单,在Ubuntu里输入ghci就好了。
如果想要退出,在这里输入:quit就好啦,不要忘记前面的冒号哦。
此外,除了:quit,我们还有另一种方式可以离开ghci,那就是Ctrl+D,会显示Leaving GHCi.,并且返回目录。
prelude>叫做命令行提示,一个没用的小知识叫做可以通过:set prompt "XXX> "把它改成XXX>
四则运算
首先是四则运算,已经懒得打代码了,直接上图吧。
然后是布尔函数,和很多语言一样,
&&表示并(和),||表示交(或),而not表示非,就是True变 False,False变True。
布尔运算
对于布尔函数而言,判断符号也需要了解,例如==表示判断是否相等,/=则表示判断是否不等。
截图会比较乱,我们这里上整段代码:
ghci> 1==1
True
ghci> 1==2
False
ghci> 0==1
False
ghci> 0==0
True
ghci> 0==1
False
ghci> 1/=0
True
ghci> 1/=1
False
ghci> not(1/=1)
True
ghci> (1/=0)&&(1==1)
True
ghci> (0==0)||(1==1)
True
内置函数
Haskell 有一些内置函数,很容易理解,比如max和min,他们实在太好理解了,而且函数后面的变量不需要用括号括起来,只需要一个空格。
ghci> max 0 1
1
ghci> min 1 0
0
当然,有一点要注意的是,它们只接受两个能比较大小的参量。下面就是一个报错例子。
ghci> max 0 1 2 3
<interactive>:29:1: error:
• Non type-variable argument
in the constraint: Ord (t1 -> t2 -> t3)
(Use FlexibleContexts to permit this)
• When checking the inferred type
it :: forall t1 t2 t3.
(Ord (t1 -> t2 -> t3), Num t1, Num t2, Num (t1 -> t2 -> t3)) =>
t3
ghci>
还有一个叫succ的无趣函数,它是successor(后继)的缩写,作用就是返回参数之后的那个数。比如下面。
ghci> succ 99
100
此外还有一个函数叫做div,相除取商。这个函数有两个参量,因此也可以写成中缀函数的形式便于阅读,用一个``表示(对的,只需要一个,我只是打不出来),例如下面,它们表示同一个意思,只是为了便于和平常的手写习惯匹配。
ghci> div 97 6
16
ghci> 97 `div` 6
16
补充
Haskell的内置函数在A Tour of the Haskell Prelude链接里有详细的说明,不过有部分函数(例如chr、ord)已经不能使用了。