在Haskell中是否存在多重条件?

时间:2019-05-07 18:50:20

标签: if-statement haskell

我正在尝试嵌套警卫,以检查两个以上的情况:

f :: Int -> Int
f i
   | bool1
       | bool2 = a
       | bool3 = a2
       | otherwise = a3
   | bool4
       | bool5 = a4
       | bool6 = a5
       | otherwise = a6
   | bool8
...
   | otherwise = an


这给了我一个解析错误。 是正确的方法
   用&&​​或
使卫兵变扁平    实现这样的功能:

multiIf :: [Bool] -> [a] -> a
multiIf (x:xs) (l:ls) = if x then l else multiIf xs ls
multiIf _ _ = undefined

还是有另一种方法?

1 个答案:

答案 0 :(得分:3)

不是直接的,但是the MultiWayIf extension可以为您提供非常相似的样式。

{-# LANGUAGE MultiWayIf #-}

f :: Int -> Int
f i
   | bool1
       = if | bool2 -> a
            | bool3 -> a2
            | otherwise -> a3
   | bool4
       = if | bool5 -> a4
            | bool6 -> a5
            | otherwise -> a6
   | bool8
...
   | otherwise = an