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".
希望对您有所帮助。
我在进行以下练习时遇到问题:
编写一个接收三个 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".
希望对您有所帮助。