否定作为失败约束 {{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)}}。