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])
`
示例中显示的当前行为符合 Scheme 中的 miniKanren,所以只是文档字符串不正确,实现是正确的。