序幕

合乎邏輯

&& 是邏輯 AND, || 是邏輯 OR。

== 是相等, /= 不相等, < / <= 較小,> / >= 較大的運算子。

算術運算子

數值運算子 +-/表現與你期望的大致相同。 (除法僅適用於小數以避免舍入問題 - 必須使用 quotdiv進行整數除法 )。Haskell 的三個取冪運算子更不尋常:

  • ^ 將任意數字型別的基數轉換為非負整數冪。這通過( 快速 )迭代乘法簡單地起作用。例如

    4^5  ≡  (4*4)*(4*4)*4
    
  • ^^ 在正面情況下也是如此,但也適用於負指數。例如

    3^^(-2)  ≡  1 / (2*2)
    

    ^不同,這需要一個基本型別(即 4^^5 :: Int 不起作用,只有 4^5 :: Int4^^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

請注意,索引列表效率低(複雜度為 On )而不是陣列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) 將等待使用者輸入一個數字,然後將該數字的平方輸出到螢幕。