序幕
合乎逻辑
==
是相等, /=
不相等, <
/ <=
较小,>
/ >=
较大的运算符。
算术运算符
数值运算符 +
, -
和 /
的表现与你期望的大致相同。 (除法仅适用于小数以避免舍入问题 - 必须使用 quot
或 div
进行整数除法 )。Haskell 的三个取幂运算符更不寻常:
-
^
将任意数字类型的基数转换为非负整数幂。这通过( 快速 )迭代乘法简单地起作用。例如4^5 ≡ (4*4)*(4*4)*4
-
^^
在正面情况下也是如此,但也适用于负指数。例如3^^(-2) ≡ 1 / (2*2)
与
^
不同,这需要一个基本类型(即4^^5 :: Int
不起作用,只有4^5 :: Int
或4^^5 :: Rational
)。 -
**
实现实数指数运算。这适用于非常一般的参数,但比^
或^^
更昂贵,并且通常会产生小的浮点错误。2**pi ≡ exp (pi * log 2)
清单
有两个连接运算符:
-
:
(发音为 cons )在列表之前添加一个参数。该运算符实际上是一个构造函数,因此也可用于模式匹配 (逆构造)列表。 -
++
连接整个列表。[1,2] ++ [3,4] ≡ 1 : 2 : [3,4] ≡ 1 : [2,3,4] ≡ [1,2,3,4]
!!
是一个索引运算符。
[0, 10, 20, 30, 40] !! 3 ≡ 30
请注意,索引列表效率低(复杂度为 O ( n )而不是数组的 O (1) 或映射的 O (log n ) ); 在 Haskell 中通常首选通过折叠模式匹配而不是索引来解构列表。 ** **
控制流
-
$
是一个函数应用程序运算符。f $ x ≡ f x ≡ f(x) -- disapproved style
此运算符主要用于避免括号。它还有一个严格的版本
$!
,它强制在应用函数之前评估参数。 -
.
组成功能。(f . g) x ≡ f (g x) ≡ f $ g x
-
>>
序列 monadic 行动。例如,writeFile "foo.txt" "bla" >> putStrLn "Done."
将首先写入文件,然后将消息打印到屏幕。 -
>>=
做同样的事情 ,同时也接受从第一个动作传递到下一个动作的参数。readLn >>= \x -> print (x^2)
将等待用户输入一个数字,然后将该数字的平方输出到屏幕。