Haskell IF语句

swi*_*itz 5 haskell

我对haskell很新,但如果你做一个if语句:

function a b c
     | (a+b == 0) = True
     | --etc.
     | otherwise = False
Run Code Online (Sandbox Code Playgroud)

如果在其他语言中,第二个if语句与else相同,或者只是另一个if语句.我假设它是前者,因为你只能有一个输出,但我只是想确定.

Dar*_*rio 9

您使用的构造称为警卫.Haskell一个接一个地检查给定的替代方案,直到一个条件产生True.然后它评估该等式的右侧.

你可以写得很好

function n 
   | n == 1 = ...
   | n == 2 = ...
   | n >= 3 = ...
Run Code Online (Sandbox Code Playgroud)

因此,guard类代表来自其他语言的if/elseif结构.由于otherwise被简单地定义为True,最后

| otherwise =
Run Code Online (Sandbox Code Playgroud)

将永远是真实的,因此代表了一个包罗万象的else条款.

尽管如此,Haskell还是有一个通常的a = if foo then 23 else 42说法.

  • 请注意,在Haskell中,`if`语句的`else`部分是必需的.参见[Haskell 2010:Conditionals](http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-320003.6).然后是["when"和"unless"](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Control-Monad.html#v:when) (2认同)