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)
您可以为此定义运算符:
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)
如果由于某种原因需要这个.