Function Haskell多重条件组合

Function Haskell多重条件组合,function,haskell,if-statement,conditional-statements,Function,Haskell,If Statement,Conditional Statements,我已经找了一段时间了,没有找到我的问题的答案。 我试着编写一个函数,根据某个月是否在一个圈年返回该月的天数。我之前已经定义了函数“lapyar”。我的问题是如何在另一个If条件中创建If条件 非常感谢您的回答:) 你可能会喜欢分机 {-# LANGUAGE MultiWayIf #-} if lapyear anyo then if | or [...] -> 31 | mes == 20 -> 29 | otherwise -> 30 else if

我已经找了一段时间了,没有找到我的问题的答案。 我试着编写一个函数,根据某个月是否在一个圈年返回该月的天数。我之前已经定义了函数“lapyar”。我的问题是如何在另一个If条件中创建If条件

非常感谢您的回答:)

你可能会喜欢分机

{-# LANGUAGE MultiWayIf #-}

if lapyear anyo then if
    | or [...] -> 31
    | mes == 20 -> 29
    | otherwise -> 30
else if
    | ...

普通Haskell中的一些备选方案(无扩展):

  • if-then-else
    链:

    if lapyear anyo then
       if or [...] then 31
       else if mes == 02 then 29
       else 30
    else ...
    
    if lapyear anyo then
       case () of
       _ | or [...]  -> 31
         | mes == 02 -> 29
         | otherwise -> 30
    else ...
    
  • 使用

    if lapyear anyo then
       let result | or [...]  = 31
                  | mes == 02 = 29
                  | otherwise = 30
            in result
    else ...
    
  • 使用
    案例

    if lapyear anyo then
       if or [...] then 31
       else if mes == 02 then 29
       else 30
    else ...
    
    if lapyear anyo then
       case () of
       _ | or [...]  -> 31
         | mes == 02 -> 29
         | otherwise -> 30
    else ...
    

我相信最后一个是最流行的。

如果然后如果然后x1否则x2否则x3
?或者你可能对GHC的扩展感兴趣。无论如何,代码似乎是错的。您有
mes==[01,03,…]
然后是
mes==02
。但是列表不太可能是
Num
实例,因此这可能会引发类型错误。我希望程序首先检查Lapyer anyo的条件,并根据这一点继续检查其他三个条件,以使您的ifs更加清晰,考虑使用Haskell打字系统来定义MES作为数据类型,而不是INT:数据MES = Endoo Heffelo MARZO……NoviBeMyDigiSime也考虑绑定你的DIAS数据类型,如建议:在一个无关的注释中,你可能想重写LAPYON谢谢!我认为这会起作用,但现在出现一个错误,显示“MultiWay if表达式需要启用MultiWay if”。如何导入multiwayif?它现在正在工作,我只需通过:set-xmultivayIf多谢您重新命名
{-#语言multiwayif}
。如果你把它放在文件的最顶端,你就不需要命令行标志了。对我来说,这似乎是不需要导入任何东西的最简单的方法。非常感谢。