以下脚本有什么问题?
want(grocerystore).
available(grocerystore).
want(X):-
available(X).
can(grocerystore):-
want(grocerystore),
\+work(walmart),
available(grocerystore).
Run Code Online (Sandbox Code Playgroud)
“不连续谓词”意味着您为给定谓词定义了多个子句,但在其间定义了不同谓词的子句。Prolog 希望给定谓词的所有子句放在一起。
下面是正确定义的 Prolog 的示例,其中对于给定谓词或事实有多个子句:
person(sally).
person(sue).
dog(fido).
dog(fluffy).
Run Code Online (Sandbox Code Playgroud)
你可以看到所有的person事实都在一起,所有的dog事实都在一起。
这是“不连续谓词”的示例:
person(sally).
dog(fido).
person(sue).
dog(fluffy).
Run Code Online (Sandbox Code Playgroud)
在这里,person事实被dog事实“打断”(反之亦然)。
同样的问题适用于谓词和事实。在您的情况下,两个不同的want条款被以下available事实“打断”:
want(grocerystore).
available(grocerystore). % 'available' clause occurs between two 'want' clauses
want(X) :- ...
Run Code Online (Sandbox Code Playgroud)
在这种情况下很容易修复:
available(grocerystore).
want(grocerystore).
want(X) :- ...
Run Code Online (Sandbox Code Playgroud)
您的程序可能存在其他问题,但我只是解决您关于“不连续谓词”的问题。