序幕

合乎逻辑

&& 是逻辑 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) 将等待用户输入一个数字,然后将该数字的平方输出到屏幕。