我一直在寻找一段时间,并没有找到我的问题的任何答案。 我试着编写一个函数来返回特定月份的日期,具体取决于它是否在一年中。我已经定义了功能" lapyear"先前。我的问题是如何在另一个If条件下创建If条件?
非常感谢您的回答:)
lapyear:: Int->Bool
lapyear a
|((rem)a 400)==0 = True
|((rem)a 100)==0 = False
|((rem)a 4)==0 = True
|otherwise = False
type Mes = Int
type Anyo = Int
type Dias= Int
daysAmonth:: Mes->Anyo->Dias
daysAmonth mes anyo
if lapyear anyo then do
|or[mes==01,mes==03,mes==05,mes==07,mes==08,mes==10,mes==12] = 31
|mes==02 = 29
|otherwise = 30
else
|or[mes==01,mes==03,mes==05,mes==07,mes==08,mes==10,mes==12] = 31
|mes==02 = 28
|otherwise = 30
答案 0 :(得分:3)
您可能希望MultiWayIf
扩展名。
{-# LANGUAGE MultiWayIf #-}
if lapyear anyo then if
| or [...] -> 31
| mes == 20 -> 29
| otherwise -> 30
else if
| ...
答案 1 :(得分:1)
普通Haskell中的一些替代方案(没有扩展名):
if then else
的链:
if lapyear anyo then
if or [...] then 31
else if mes == 02 then 29
else 30
else ...
使用let
:
if lapyear anyo then
let result | or [...] = 31
| mes == 02 = 29
| otherwise = 30
in result
else ...
使用case
:
if lapyear anyo then
case () of
_ | or [...] -> 31
| mes == 02 -> 29
| otherwise -> 30
else ...
我相信最后一个是最受欢迎的。