Function Haskell多重条件组合
我已经找了一段时间了,没有找到我的问题的答案。 我试着编写一个函数,根据某个月是否在一个圈年返回该月的天数。我之前已经定义了函数“lapyar”。我的问题是如何在另一个If条件中创建If条件 非常感谢您的回答:) 你可能会喜欢分机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
{-# 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}
。如果你把它放在文件的最顶端,你就不需要命令行标志了。对我来说,这似乎是不需要导入任何东西的最简单的方法。非常感谢。