评估和收集条件的结果

Bil*_*ain 1 haskell functional-programming if-statement pattern-matching

我有一堆条件返回列表,有没有一种方法来评估它们而不给每个条件一个名字?

简化示例:

conditions i j = c1 i j ++ c2 i j ++ c3 i j

    where 
    c1 i j | i > 2     = ["x"]
           | otherwise = []
    c2 i j | j > 5   = ["y", "a"]
           | otherwise = []
    c3 i j | j > 10  = ["z"]
           | otherwise = []
    c4 i j | j > 10 && i > 1 = ["z", "c", "hello"]
           | otherwise = []
Run Code Online (Sandbox Code Playgroud)

use*_*465 5

您可以为此定义运算符:

infixl 1 *|

(*|) :: [a] -> Bool -> [a]
xs *| b | b = xs
xs *| b     = []

conditions i j = (["x"]             *| i > 2)
              ++ (["y", "a"]        *| j > 5)
              ++ (["z"]             *| j > 10)
              ++ (["z","c","hello"] *| j > 10 && i > 1)
Run Code Online (Sandbox Code Playgroud)

它也可以重写最后一行

++ (["z","c","hello"] *| j > 10 *| i > 1)
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因需要这个.