【问题标题】:Haskell multiple conditions of IfHaskell if 的多重条件
【发布时间】:2015-10-14 02:41:38
【问题描述】:

我在以下练习中遇到问题:

编写一个函数,接收三个 Int,如果它们都是正数,则将它们相加,否则返回 0(零)。

我所做的如下:

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

我不知道如何在 if 上创建多个条件,不确定这是使用逻辑“连接器”(如 Java 中的 ||&&)还是以类似的方式完成我写的代码。

【问题讨论】:

标签: haskell if-statement logic conditional-statements


【解决方案1】:

可以通过多种方式完成。

例如,使用&&:

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]

【讨论】:

  • 所以 && ||在 Haskell 中的工作方式与在 Java 中的工作方式相同吗?我可以在不使用守卫的情况下使用 where 关键字?
【解决方案2】:

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

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

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2016-01-20
    • 2015-02-07
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多