不连续的谓词是什么意思?

时间:2016-11-14 19:03:03

标签: prolog

以下脚本有什么问题?

require_once 'models/PodioRedisSession.php';

Podio::set_debug(true, 'file');
Podio::setup($client_id, $client_secret,array(
  "session_manager" => "PodioRedisSession"
));

Podio::$auth_type = array(
  "type" => "password",
  "identifier" => "MY_EMAIL"
);
Podio::$oauth = self::$session_manager->get(Podio::$auth_type); //ERROR IS ON THIS LINE

if (!Podio::is_authenticated()) {

  Podio::authenticate_with_password('MY_EMAIL', 'MY_PASSWORD');
}

1 个答案:

答案 0 :(得分:2)

“Discontiguous predicate”表示您为给定谓词定义了多个子句,但在两者之间定义了不同谓词的原因。 Prolog希望将给定谓词的所有子句放在一起。

以下是Prolog正确定义的示例,其中包含给定谓词或事实的多个子句:

person(sally).
person(sue).

dog(fido).
dog(fluffy).

您可以看到所有person个事实在一起,并且所有dog个事实都在一起。

这是一个“不连续的谓词”的例子:

person(sally).
dog(fido).

person(sue).
dog(fluffy).

此处,person事实被dog事实“中断”(而反之亦然)。

同样的问题也适用于谓词,因为它与事实有关。在您的情况下,want事实会“中断”两个不同的available子句:

want(grocerystore).
available(grocerystore).   % 'available' clause occurs between two 'want' clauses
want(X) :- ...

在这种情况下轻松解决:

available(grocerystore).

want(grocerystore).
want(X) :- ...

您的程序可能还有其他问题,但我只是解决了您对“不连贯的谓词”的疑问。