MiniKanren有没有“不”操作符?MiniKanren是否有“不”操作符?
例如,如何将一个代表的Prolog的
a :- b, not(c)
a
为真,如果b
是真实的,c
不是(Prolog使用否定为失败,即not(c)
被认为是成熟的,如果c
不能被证明)
Prolog's not
也适用于非基础表达式,eg
a(X, d(Y)) :- b(d(X), d(Y)), not(c(d(X)))
MiniKanren有没有“不”操作符?MiniKanren是否有“不”操作符?
例如,如何将一个代表的Prolog的
a :- b, not(c)
a
为真,如果b
是真实的,c
不是(Prolog使用否定为失败,即not(c)
被认为是成熟的,如果c
不能被证明)
Prolog's not
也适用于非基础表达式,eg
a(X, d(Y)) :- b(d(X), d(Y)), not(c(d(X)))
根据https://github.com/zhjhxxxjh/ykanren答案是否定的。
有一个在minikanren没有not
运营商,但你可以实现与conda
类似的东西:
(defmacro not
"fail if the given goal succeeds, use with extreme caution"
[goal]
`(conda
[~goal fail]
[succeed]))
core.logic仍然允许[否定为失败(https://开头组。尽管如此,google.com/forum/#!topic/clojure/hz63yeQfiQE)。 –
@AndersonGreen和Prolog的'not'完全等价吗? (见编辑) – MaxB