首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`>||<`操作符在Haskell中做什么?

`>||<`操作符在Haskell中做什么?
EN

Stack Overflow用户
提问于 2019-11-07 05:34:31
回答 1查看 67关注 0票数 0

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-11-07 05:50:13

在haskell中,如果函数由括号关闭,则可以使用符号命名。例如

代码语言:javascript
复制
(+-+) :: Num a => a -> a -> a -> a
(+-+) x y z = (x+y) - z

它可以使用:

代码语言:javascript
复制
(+-+) 3 4 2
=> 5

当您使用where子句时,您是在告诉Haskell创建一个具有调用函数的作用域的函数,例如:

代码语言:javascript
复制
fun1 r m = doSome r m
  where
  doSome r1 m1 = r1 + m1

在这里,doSome函数只能在fun1作用域中调用,它接受两个数字并将它们相加。在您的示例中:

代码语言:javascript
复制
dpll e v
  where
  units = ...
  unitLit =  ...
  lit = ...
  propagate n e = ...
  (>||<) x y = if x /= [] then x else y

您的函数的类型为:

代码语言:javascript
复制
(>||<) :: Eq a => [a] -> [a] -> [a]

(>||<)是在dpll作用域中定义的函数,如果第一个列表不为空,则返回第一个列表,如果第一个列表为空,则返回第二个列表。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58738825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档