【发布时间】:2023-03-08 06:38:01
【问题描述】:
我试图嵌套检查两个以上条件的守卫,如下所示:
f :: Int -> Int
f i
| bool1
| bool2 = a
| bool3 = a2
| otherwise = a3
| bool4
| bool5 = a4
| bool6 = a5
| otherwise = a6
| bool8
...
| otherwise = an
这给了我一个解析错误。
这是正确的方法吗
用 && or 压平警卫
实现这样的功能:
multiIf :: [Bool] -> [a] -> a
multiIf (x:xs) (l:ls) = if x then l else multiIf xs ls
multiIf _ _ = undefined
或者有其他方法吗?
【问题讨论】:
-
试试 MultiWayIf 扩展。
-
这是否意味着如果
bool7为假,则再次考虑外部分支并评估bool8,等等?你的multiIf不会那样做,AFAICS。 -
@chi 谢谢,我本来打算用别的方式
-
虽然我承认它不是特别好,但如果你真的需要编写这种函数,那么我可能会制作一个大的
if/then/else树,并带有适当的缩进。 -
@RobinZigmond 次要观点:从技术上讲,
if不需要任何缩进(但实际上在没有适当缩进的情况下编写大型嵌套if会导致代码不可读,因此仍然强烈推荐)。跨度>
标签: if-statement haskell