Haskell If 的多个条件

Haskell multiple conditions of If

我在进行以下练习时遇到问题:

编写一个接收三个 Int 的函数,如果它们都是正数则对它们求和,否则 returns 0(零)。

我所做的如下:

sum' :: int -> int -> int -> int
sum' x y z = if x >= 0, y >= 0, z >= 0 then x+y+z else 0

我不知道如何在 if 上设置多个条件,不确定这是否是用逻辑 "connectors" 完成的(比如 [=23= 中的 ||&& ]) 或者是否以与我编写的代码类似的方式完成。

可以通过多种方式完成。

例如,使用&&:

sum' :: Int -> Int -> Int -> Int
sum' x y z = if x >= 0 && y >= 0 && z >= 0 then x+y+z else 0

或使用 all 和列表:

sum' :: Int -> Int -> Int -> Int
sum' x y z = if all (>= 0) xs then sum xs else 0
    where xs = [x, y, z]

或者使用守卫,这将使它看起来几乎与定义的人类版本完全一样:

sum' :: Int -> Int -> Int -> Int
sum' x y z 
    | x >= 0 && y >= 0 && z >= 0 = x+y+z
    | otherwise = 0

附带说明,请始终记住类型以大写字母开头。在你的情况下,你的类型签名应该使用 "Int" 而不是 "int".

希望对您有所帮助。