2
Answer Set Programming(ASP)のサンプル問題があります。私がPrologで同等のコードを作成しようとすると、私はnot
がブロックされたままになってしまいます。Prolog - ASP 'not' to Prolog negate
これはASPコードです:
road(berlin,potsdam).
road(potsdam,werder).
road(werder,brandenburg).
road(X,Y) :- road(Y,X).
blocked(werder,brandenburg).
route(X,Y) :- road(X,Y), not blocked(X,Y).
route(X,Y) :- route(X,Z), route(Z,Y).
drive(X) :- route(berlin,X).
#show drive/1
答えは:drive(potsdam)
、drive(werder)
、drive(berlin)
。
Prologでは、最初はnot
を\+
に変更するだけで簡単だと思っていました。私がdrive(X).
を照会すると、それは再帰的にX = potsdam
答えを生成します。私はPrologとASPが異なって動作することを知っていますが、私はそれを理解できません。
road(X,X).
として
road(X,Y) :- road(Y,X).
:あなたは述語を置き換えることができます
is road(X,Y)?
is road(Y,X)?
is road(X,Y)?
is road(Y,X)?
.....
:
あなたは、道路(ヴェルダー、都市)を追加した場合。それは結果都市として、それはすべきではありません。 – coder
あなたの権利は、更新を迅速にすることでした。以前のバージョンはまだ動作しますが、重複した回答が得られます。 – Limmen