我在答案集编程(ASP)中有一个示例问题。当我尝试在 Prolog 中编写等效代码时,我一直被not阻塞。
这是 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 的工作方式不同,但我就是想不通。