不连续谓词是什么意思?

Mon*_*187 0 prolog

以下脚本有什么问题?

want(grocerystore).
available(grocerystore).
want(X):-
   available(X).
can(grocerystore):-
   want(grocerystore),
   \+work(walmart),
   available(grocerystore).
Run Code Online (Sandbox Code Playgroud)

lur*_*ker 5

“不连续谓词”意味着您为给定谓词定义了多个子句,但在其间定义了不同谓词的子句。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)

您的程序可能存在其他问题,但我只是解决您关于“不连续谓词”的问题。