【问题标题】:how to have multiple if statements in Haskell?如何在 Haskell 中有多个 if 语句?
【发布时间】:2022-11-12 02:16:45
【问题描述】:

比如考虑下面的python代码,


n = 4
if n>3 :
  n = 5
if n>2 :
  n = 6
if n>1 :
  n = 4

如何在haskell中实现这一点?

let n = 4
main :: IO()
main = do 
    if n>3 then let n = 5
    if n>2 then let n = 6
    if n>1 then let n = 4

试过这个,但给出了一个错误,正在寻找一些修改

【问题讨论】:

  • if 语句后面必须跟else。因此你应该写if n>3 then ... else if n>4 then ... else ...。更惯用的方法是使用guards。还要注意不可变的 Haskell,因此您的程序不会更改 n 的值,这看起来像是您的意图。我的建议是定义一个函数f :: Int -> Int,它使用守卫来分支案例并返回期望值。
  • 这也是一个愚蠢的示例程序,因为它与if n > 1 then n = 4 相同。

标签: if-statement haskell


【解决方案1】:

虽然这个例子有点做作,但使用多个分支对 if 进行编码的常用方法是使用带有 () 的 case-of 作为审查对象,如下所示:

main :: IO()
main = do 
    let x = case () of 
             _ | n > 3 -> 5
               | n > 2 -> 6
               | otherwise -> 4
    print x

或者,这也可以编码为辅助函数的守卫

f :: Int -> Int
f n | n > 3 = 5
    | n > 2 = 6
    | otherwise = 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多