4

私は Seven Languages In Seven Weeks Prolog チュートリアルを使用しており、Android Jekejeke Runtime を使用していくつかの例を実行しようとしています。たとえば、追加すると

likes(wallace, grommit).

チュートリアルから、私は得る。

Error: Undefined, private or package local predicate likes/2

How to create a fact in SWI-Prolog? で説明されているように、assert を使用してみました。assert、しかし、好きではなく、それは未定義であると言います。

おそらく、ランタイムがどのように機能するか、またはその prolog.it の方言に関する基本的なことが欠けています。

4

2 に答える 2

5

assert/1いくつかの実装で提供されていますが、標準の述語ではありません。Jekejeke Prolog には当てはまらないようです。代わりに、asserta/1またはassertz/1標準の述語を使用してください。最初のものは、述語の最初のものとして句をアサートします。後者は、述語の最後として句をアサートします。

于 2015-02-09T10:13:42.787 に答える
0

これは一般的なエラーです。つまり、ファクトを入力することでトップレベルに直接入力できるという一定の前提があるということです。

インタープリターは、クエリとして入力されたものを理解し、クエリの述語がまだ定義されていないため、エラーを発行します。

ただし、エンドユーザーには複数のオプションがあります。

1) 最初のオプションは assertz/1 または asserta/1 を使用します:
トップレベルは目標を実行するためのものです。インタープリターにアサートを実行するように指示するゴールが必要です。asserta/1 または assertz/1 を使用します。

トップレベル:

?- assertz(likes(foo, bar)).

すでに静的述語として使用されている述語、つまり方法 2) または 3) によって追加された述語は、それ以上アサートできないことに注意してください。次に、dynamic/1 ディレクティブを使用します。

組み込みの assert/1 は、ISO コア標準の一部ではなく、通常は assertz/1 に対して冗長であるため、サポートされていません。

2) 2 番目のオプションは、ファイルを使用して参照し
ます。ファクトとルールをファイルに配置します。そして、consult/1 ビルトインを介して参照します。

ファイル baz.p:

likes(foo, bar).

トップレベル:

?- consult('baz.p').

Consult/1 の代わりに、ensure_loaded/1 または use_module/1 を使用することもできます。

3) コンソールから直接参照する 3 番目のオプション:
トップレベルでファクトとルールを直接入力します。ファイルの終わりのキー ストロークによって、事実と規則の入力を終了します。

トップレベル:

?- [user].
likes(foo, bar).
^D

さよなら

于 2015-10-06T12:56:03.223 に答える