2024 年 Clojure 状况调查! 中分享您的想法。

欢迎使用!请查阅 关于 页面以获取更多关于这是如何工作的信息。

0投票
core.logic

{{condu}} 的文档字符串如下

{quote}
已提交的选择。一旦子句的头部(第一个目标)成功,该子句的剩余目标将只会运行一次。非关系的。
{quote}

关于一次语义的句子不准确。头部(第一个目标)最多只能成功一次,而子句已提交的剩余目标可以无限次成功。以下示例证明了这一点。

`
(defn y-or-n [x]
(conde
[(== x :y)]
[(== x :n)]))

(run* [x y]
(condu
[(y-or-n x) (== y 1)] ;; (y-or-n x) 由于它是头部目标,因此只会成功一次
[(== x :y) (== y 2)]))
;;=> ([:y 1])

(run* [x y]
(condu
[(== y 1) (y-or-n x)] ;; (y-or-n x) 由于它不是头部目标,所以可以成功两次
[(== x :y) (== y 2)]))
;;=> ([:y 1] [:n 1])
`

示例中显示的当前行为符合 miniKanren 在 Scheme 上的行为,所以只是文档字符串不正确。实现是正确的。

1 个答案

0投票
...