2016-11-26 6 views
0

私はSWI Prologを使っています。私は、XとYの和を返すadd(X, Y)という追加関数を定義したいと考えています。しかし、Prologで関数を定義する方法はわかりません。 Prologで関数を書く

add(X, Y, Z) :- Z is X+Y. 

が、フォーム add(2, 3, X)のクエリを実行すると、これはというエラーを与える:私は、次のような述語を使用してこれをやってみました

ERROR: toplevel: Undefined procedure: add/3 (DWIM could not correct goal)

はまた、私は:-:=しばらくの違いを理解することはできません書くルール。私は、:=が関数を定義するために使用されている間に、述語を定義するために:-が使用されているところを読んでいます。これが正しいかどうかはわかりません。関数を定義するのに:=を使ってみましたが、機能しません。

答えて

2

、プロローグファイルと同じディレクトリに身を置きfunction.plソース・ファイルをロードしてコンパイルするには、以下のように入力します。あなたは、ファイル機能に掲示正確なコードと

[function]. 

は今テストラン(。 pl):

?- add(2,3,X). 
X = 5. 

Swi-prolog v 6.6.4が使用されます。

Also, I cannot understand the difference between :- and := while writing rules. I read somewhere that :- is used to define predicates while := is used to define functions. I am not sure if this is correct. I tried using := for defining functions but it doesn't work.

ロジックプログラムは、(述語別名)公理、または規則のセットであり、関数が実際に入力セットからわずかマッピングであるため、オブジェクト間の関係を定義する、明示的な関数の概念が使用されるがされていません出力セットには、add/3リレーションで行ったように、リレーションとしてモデル化できます。

:-は、論理意味を読み取ることができます(実際に私は、シンボルを逆矢印のように見えることになっていると思います)

あなたは私を参照している:=オペレータでもSWIプロローグのドキュメントで見つけることができません:search results for :=。あなたがそれに関する情報を見つけた場所にリンクすることができれば素晴らしいだろう。