clojure.core.logic
Core.logic 不是 Clojure 标准发行版的一部分,必须作为依赖项包含在内。.
clojure.core.logic 中的变量
*^%
- !=
- 不相等约束。确保 u 和 v 永远不会统一。u 和 v 可以是复杂项。
- ->Choice
- 类 clojure.core.logic.Choice 的位置工厂函数。
- ->LCons
- 类 clojure.core.logic.LCons 的位置工厂函数。
- ->LVar
- 类 clojure.core.logic.LVar 的位置工厂函数。
- ->Pair
- 类 clojure.core.logic.Pair 的位置工厂函数。
- ->PMap
- 类 clojure.core.logic.PMap 的位置工厂函数。
a
- and*
- all 的函数版本,它接受一个目标列表,并且仅当所有目标都成功时才成功。
- appendo
- x、y 和 z 是适当集合的关系,其中 z 是 x 附加到 y
c
- conda
- 软剪切。一旦子句的头部成功,所有其他子句都将被忽略。非关系型。
- conde
- 子句的逻辑析取。子句中的第一个目标被视为该子句的头部。交错执行子句。
- condu
- 提交选择。一旦子句的头部(第一个目标)成功,则该子句的其余目标将只运行一次。非关系型。
- conso
- l 是集合的关系,其中 a 是 l 的第一个元素,d 是 l 的其余部分。如果 ground,d 必须绑定到一个适当的尾部。
d
- defne
- 定义目标函数。支持模式匹配。将尝试所有模式。参见 conde。
e
- everyg
- 一个伪关系,它接受一个集合并确保目标 g 在集合的每个元素上都成功。
f
- featurec
- 确保映射至少包含映射 fs 中的键值对。fs 必须部分实例化 - 也就是说,它可能包含逻辑变量值以支持特征提取。
- firsto
- l 是集合的关系,其中 a 是 l 的第一个元素
- fnc
- 定义一个可以与 unifier 一起使用的匿名约束:(let [oddc (fnc [x] (odd? x))] (unifier {:a '?a} {:a 1} :when {'?a oddc}) ;;=> {:a 1} (unifier {:a '?a} {:a 2} :when {'?a oddc}) ;;=> nil ) 注意,在所有参数都完全接地之前,约束不会运行。使用 defnc 定义约束并将顶级变量赋值给它。
- fne
- 定义匿名目标函数。支持模式匹配。将尝试所有模式。参见 conde。
- fresh
- 创建新的变量。出现在 form 中的目标形成逻辑连接。
i
- is
- 使用应用的操作将变量的值设置为另一个变量的值。非关系型。
l
- lcons
- 如果 d 是逻辑变量,则构造具有不正确尾部 d 的序列 a。
- llist
- 从 2 个或更多参数构造一个序列,最后一个参数作为尾部。如果最后一个参数是逻辑变量,则尾部是不正确的。
- lvaro
- 如果参数是新的,则成功的目标。v 必须是逻辑变量。非关系型。
m
- map->PMap
- 类 clojure.core.logic.PMap 的工厂函数,接受关键字到字段值的映射。
- master
- 获取目标的参数并检查缓存中是否没有 alpha 等效的缓存答案项。如果它尚不存在于缓存中,则添加新的答案项。
- matche
- 模式匹配宏。所有模式都会被尝试。参见 conde。
- member1o
- 类似于 membero,但使用不等式进一步约束结果。例如,如果 x 和 l 是 ground 且 x 在 l 中出现多次,member1o 只会成功一次。
n
- nafc
- 实验性:否定为失败约束。目标 c 的所有参数必须是 ground。如果某些参数不是 ground,则此约束的执行将被延迟。
- nonlvaro
- 如果参数不是 fresh,则该目标成功。v 必须是逻辑变量。非关系型。
o
- or*
- conde 的函数版本,它接受一个目标列表,并像通过 conde 一样尝试它们。请注意,or* 只进行析取,即 (or* [a b c]) 与 (conde [a] [b] [c]) 相同。如果需要类似 (conde [a b] [c]) 的内容,可以使用 and* 或 all:(or* [(and* a b) c])。
p
- permuteo
- 将 xl 排列成 yl 的关系。如果 xl 不是 ground,则可能无法终止。
r
- rembero
- l 和 o 之间的关系,其中 x 从 l 中恰好移除一次。
- resto
- l 是一个集合,d 是 l 的其余部分的关系。
- run-db
- 执行目标,直到找到最多 n 个结果。使用指定的逻辑数据库。
- run-nc
- 执行目标,直到找到最多 n 个结果。不进行 occurs-check。
- run-nc*
- 执行目标,直到结果耗尽。不进行 occurs-check。
t
- tabled
- 用于定义表格目标的宏。建议使用带有 defne/a/u 形式的 ^:tabled,而不是直接使用它。
w
- waiting-stream-check
- 获取一个等待流、一个成功延续和一个失败延续。如果我们没有找到任何准备好的挂起流,则调用失败延续。如果我们找到一个准备好的挂起流,则计算等待流的剩余部分。如果我们到达了不动点,只需调用挂起流的 thunk,否则对 thunk 的结果和等待流的剩余部分调用 mplus。将此结果传递给成功延续。