2009-12-03 17 views
5

私はPrologを初めて使用しています。これまで、ファイルに述語を定義し、それを使用するためにインタープリタを実行する方法を学習しました。しかし、私は前後に切り替える必要がないように、?プロンプトで述語を定義する方法があるかどうかを知りたいと思います。プロローグをプロローグに定義する方法

私は今それをやっている方法は、この

ファイルdefs.plのようなものです:多分私は定義する方法を意味

?- consult('defs.pl'). 
% defs.pl compiled 0.00 sec, 122 bytes 
true. 
?- adjacent(1,2). 
true. 

EDIT :プロローグインタプリタで

adjacent(1,2). 
adjacent(1,3). 

「事実」私は確信していません。

?- assert(adjacent(1,4)). 
true 

EDIT:あなたはassert/1述語を使用することができます

答えて

9

ところで を使用すると、ファイルに定義された述語とそれを組み合わせるしようとした場合、これは動作しません。 したがって、ファイル内のすべての隣接する/ 2の述部を定義するか、コマンド行ですべてをassertで定義します。あなたがアサートと、ファイルの述部、およびその他のいくつかを定義したいならば

、述語が動的である、あなたのファイルに宣言:

% file contents 
:- dynamic(adjacent/2). 
adjacent(1,2). 
adjacent(1,3). 
4

はあなたが行うことができます

?- consult(user). 

または

?- [user]. 

このセクションを入力して、ファイルchの最後で入力を終了しますaracter(LinuxではCtrl-D、MS-WindowsではCtrl-Zでも構いません)。これはファイルを読み取ることと同じです(the documentation of consult/1を参照)。

アサート/ 1およびリトラクト/ 1は、通常のプログラミングではなく、コードによって動的に変更される(グローバルデータを格納する)述語を対象とする。

+0

私はそれがおそらく彼らのために設計されていることに同意しますが、プロローグを素早くテストして習得するために、これらを使用するための問題は表示されません。オーバーヘッドは心配しないでください。 あなたのソリューションはより洗練されていると思うのですが、さらに定義するすべての述語を再入力する必要があります。 – catchmeifyoutry