Есть ли несколько условий, если в Haskell? - PullRequest
1 голос
/ 07 мая 2019

Я пытался вложить охранников, которые проверяют более двух условий, например:

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 Ответ

3 голосов
/ 08 мая 2019

Не напрямую, но расширение MultiWayIf может дать вам очень похожий стиль.

{-# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...