否定作为失败约束{{nafc}}应该只在关系及其参数失败时才成功。测试用例仅覆盖非常简单的案例,例如{{(nafc == q 'b)}},这在很大程度上等同于(!= q 'b)
(至少按我的理解)。但面对稍微复杂一些的情况,它似乎就不再工作了。
示例
`
(run* [q]
(fresh [a b]
(== q (list a b))
(fd/in a b (fd/interval 1 3)) ;; fd is an alias for clojure.core.logic.fd
(fd/< a b)
(nafc membero 2 q)))
;=> ((1 2) (2 3) (1 3))
`
约束指定数字2不应该包含在列表{{q}}中,但仍然包含在内。我原本期望在这里得到唯一的答案{{(1 3)}}。