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