{{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 上的行为,所以只是文档字符串不正确。实现是正确的。