2017-08-11 50 views
2

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))) 

回答

1

根據https://github.com/zhjhxxxjh/ykanren答案是否定的。

+0

core.logic仍然允許[否定爲失敗(https://開頭組。儘管如此,google.com/forum/#!topic/clojure/hz63yeQfiQE)。 –

+0

@AndersonGreen和Prolog的'not'完全等價嗎? (見編輯) – MaxB

0

有一個在minikanren沒有not運營商,但你可以實現與conda類似的東西:

(defmacro not 
    "fail if the given goal succeeds, use with extreme caution" 
    [goal] 
    `(conda 
    [~goal fail] 
    [succeed])) 

my similar question on Google Groups

+0

我是否正確地理解這與Prolog的不同? (請參閱編輯) – MaxB

+0

@MaxB我會認爲它與Prolog的不一樣,因爲它們都是成功的,如果它們的論證在特定時刻無法證明的話。但是,我對邏輯編程並不熟悉,否定是棘手的,所以如果我錯了,我不會感到驚訝。 –

+0

據我所知,這個miniKanren構造不能處理變量,如第二個例子。 – MaxB

相關問題