序幕
合乎邏輯
==
是相等, /=
不相等, <
/ <=
較小,>
/ >=
較大的運算子。
算術運算子
數值運算子 +
, -
和 /
的表現與你期望的大致相同。 (除法僅適用於小數以避免舍入問題 - 必須使用 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)
將等待使用者輸入一個數字,然後將該數字的平方輸出到螢幕。