`> || <`运算符在Haskell中做什么?

时间:2019-11-06 21:34:31

标签: haskell

有人知道第七行以下的Haskell代码中的'>||<'是什么吗? (DPLL算法)

dpll :: Eq a => CNF a -> Valuation a -> Valuation a
dpll e v
| e == [] = v
| elem [] e = []
| units /= [] = dpll (propagate unitLit e) (v ++ [unitLit])
| otherwise = dpll (propagate lit e) (v ++ [lit])
>||< dpll (propagate (neg lit) e) (v ++ [(neg lit)])
where
units = filter (\x -> (length x) == 1) e
unitLit = head $ head units
lit = head $ head e
propagate n e = map (\\ [neg n]) $ filter (notElem n) e
(>||<) x y = if x /= [] then x else y

1 个答案:

答案 0 :(得分:4)

在haskell中,如果函数用括号括起来,则可以用符号命名。例如

netstat

可以使用:

(+-+) :: Num a => a -> a -> a -> a
(+-+) x y z = (x+y) - z

当您使用(+-+) 3 4 2 => 5 子句时,您是在告诉Haskell创建一个函数,该函数具有调用该函数的作用域,例如:

where

在这里,fun1 r m = doSome r m where doSome r1 m1 = r1 + m1 函数只能在doSome范围内调用,它需要两个数字并将它们加在一起。在您的示例中:

fun1

您的函数具有以下类型:

dpll e v
  where
  units = ...
  unitLit =  ...
  lit = ...
  propagate n e = ...
  (>||<) x y = if x /= [] then x else y

(>||<) :: Eq a => [a] -> [a] -> [a] 是在(>||<)范围内定义的函数,如果第一个列表不为空,则返回第一个列表,如果第一个列表为空,则返回第二个列表。