Haskell系列(一)初识Haskell

847 阅读2分钟

(一)初识Haskell

背景

Haskell 是一种高级的纯函数式编程语言,接触它单纯是因为有一门课叫做函数编程。莫斯科国立大学的老师没有讲义和教材,所以想学习的时候记录一下。我是用Ubuntu 20.04进行学习的。

安装

GHCup 是通用语言Haskell的安装程序,我个人使用GHCup进行安装,感觉官网已经写得很清楚了,如果有掘友反应需要中文版的话,我后续再进行补充。

进入 ghc 的交互模式

很简单,在Ubuntu里输入ghci就好了。

如果想要退出,在这里输入:quit就好啦,不要忘记前面的冒号哦。 此外,除了:quit,我们还有另一种方式可以离开ghci,那就是Ctrl+D,会显示Leaving GHCi.,并且返回目录。

进入.png prelude>叫做命令行提示,一个没用的小知识叫做可以通过:set prompt "XXX> "把它改成XXX>

更改命令行.png

四则运算

首先是四则运算,已经懒得打代码了,直接上图吧。

四则运算.png 然后是布尔函数,和很多语言一样,&&表示并(和),||表示交(或),而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 有一些内置函数,很容易理解,比如maxmin,他们实在太好理解了,而且函数后面的变量不需要用括号括起来,只需要一个空格。

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)已经不能使用了。