目录
0. 进入/退出交互模式ghci
安装好Haskell,命令行敲ghci
进入交互模式
Code$ ghci
GHCi, version 8.6.5: http://www.haskell.org/ghc/ :? for help
Prelude>
ghci>:q -- 退出
1. 简单的运算
ghci> 2 + 15
17
ghci> 49 * 100
4900
ghci> 1892 - 1472
420
ghci> 5 / 2
2.5
也可以在一行中使用多个运算子,他们会按照运算子优先级执行计算,而使用括号可以改变执行的优先级。
ghci> (50 * 100) - 4999
1
ghci> 50 * 100 - 4999
1
ghci> 50 * (100 - 4999)
-244950
进行布尔代数
(Boolean Algebra)
的演算也是很直觉的。你也许早就会猜,
&&
指的是布尔代数上的
AND
,而
||
指的是布尔代数上的
OR
,
not
会把 True 变成
False
,
False
变成
True
。
ghci> True && False
False
ghci> True && True
True
ghci> False || True
True
ghci> not False
True
ghci> not (True && True)
False
ghci> 5 == 5
True
ghci> 1 == 0
False
ghci> 5 /= 5
False
ghci> 5 /= 4
True
ghci> "hello" == "hello"
True
2. 简单的函数
打开编辑器,输入如下代码,它的功能就是将一个数字乘以 2
。
haskell doubleMe x = x + x
函数的声明与它的调用形式大致相同,都是先函数名,后跟由空格分隔的参数表。但在声明中一定要在 =
后面定义函数的行为。
保存为
baby.hs
或任意名称,然后转至保存的位置,打开
ghci
,执行
:l baby.hs
。这样我们的函数就装载成功,可以调用了。
ghci> :l baby
[1 of 1] Compiling Main ( baby.hs, interpreted )
Ok, modules loaded: Main.
ghci> doubleMe 9
18
ghci> doubleMe 8.3
16.6
“+” 对整数和浮点都可用
(
实际上所有有数字特征的值都可以
)
,所以我们的函数可以处理一切数值。声明一个包含两个参数的函数如下:
haskell doubleUs x y = x*2 + y*2
很简单。将其写成
doubleUs x y = x + x + y + y
也可以。
测试一下
(
记住要保存为
baby.hs
并到
ghci
下边执行
:l baby.hs
)
ghci> doubleUs 4 9
26
ghci> doubleUs 2.3 34.2
73.0
ghci> doubleUs 28 88 + doubleMe 123
478
你可以在其他函数中调用你编写的函数,如此一来我们可以将
doubleUs
函数改为:
haskell doubleUs x y = doubleMe x + doubleMe y
3. Haskell的if语句
Haskell 中
if
语句的
else 部分是不可省略。在命令式语言中,你可以通过
if
语句来跳过一段代码,而在
Haskell
中,每个函数和表达式都要返回一个结果。对于这点我觉得将
if
语句置于一行之中会更易理解。
Haskell 中的if
语句的另一个特点就是它其实是个表达式,表达式就是返回一个值的一段代码:
5
是个表达式,它返回
5
;
4+8
是个表达式;
x+y 也是个表达式,它返回 x+y
的结果。正由于
else
是强制的,
if
语句一定会返回某个值,所以说
if
语句也是个表达式。
如果要给刚刚定义的函数的结果都加上 1,可以如此修改:
doubleSmallNumber x = if x > 100 then x else x*2 + 1
注意在Haskell中首字母大写的函数是不允许的。
没有参数的函数通常被称作
“
定义
”(
或者