我对haskell很新,但是如果你做一个if语句:
function a b c
| (a+b == 0) = True
| --etc.
| otherwise = False
如果在其他语言中,第二个if语句与else相同,或者只是另一个语句。我认为它是前者,因为你只能有一个输出,但我只是想确定。
答案 0 :(得分:9)
您使用的构造称为后卫。 Haskell一个接一个地检查给定的替代方案,直到一个条件产生True
。然后它评估该等式的右侧。
你可以写得很好
function n
| n == 1 = ...
| n == 2 = ...
| n >= 3 = ...
因此,guard类代表来自其他语言的if / elseif结构。由于otherwise
简单定义为True
,最后一个
| otherwise =
将始终为true,因此代表一个全能else
子句。
尽管如此,Haskell仍然有a = if foo then 23 else 42
陈述。
答案 1 :(得分:2)
你在这里所拥有的并不是一个if语句,而是一个警卫。但你是对的,第二种情况只有在前面的情况下(通过这里的情况我的意思是|
和=
之间的表达式)才能“执行”(评估为True
)。 otherwise
只是True
的同义词(这种方式总是“匹配”)。
答案 2 :(得分:1)
它必须像其他人一样。
底部模式otherwise
实际上只是True
,因此如果第一场比赛没有获胜,您将始终获得更具体的值和其他值。
答案 3 :(得分:1)
正确。虽然你使用过警卫,但你表达它的方式与使用if语句或多或少相同。测试条件以产生结果的流程将通过您按照他们在警卫中列出的顺序编写的警卫落下。
(a+b == 0)
将首先检查
etc.
如果没有先前的条件成立,则将在第二次检查,依此类推。
otherwise
如果没有前面的条件成立,将在最后检查。