2016-04-17 5 views
2

以前はPrologで書かなかったことがあります。 [Prolog:サブセットのファクトが機能しない

subset([],_Y). 
subset([X|T],Y):- member(X,Y),subset(T,Y). 

しかし、私はは(含ま書き込み時には動作しません、次のとおりです

?- subset([a,b],[a,c,d,b]). 
    true. 
    ?-include([],[a,b]). 
    true. 

はこれまでのところ、私はこれを書いている:それは実行時にそれが表示されるように、私は事実を提供する必要が]、[a、b])。。これは、これを示しています:

ERROR: toplevel: Undefined procedure: include/2 (DWIM could not correct goal) 

助けていただければ幸いです。ありがとう

+3

'2' /含めるのいかなる定義を。 – false

答えて

2

述語include/2を定義しなかったため、エラーが発生します。与えられた例は、include/2がサブセット/ 2と同じリレーションを記述しているように見えます。だから、/ 2が含まれるようにサブセット/ 2から、あなたの定義の名前を変更し、クエリを実行するかを定義するためにサブセット/ 2を使用することができますすることができますいずれか/ 2が含まれています

include(X,Y) :- 
    subset(X,Y). 

注メンバー/ 2にあなたを使用するためのものライブラリ(リスト)を使用する必要があります。とにかくサブセット/ 2の独自のバージョンを実装する場合

Warning: ... 
Local definition of user:subset/2 overrides weak import from lists 

:しかし、いくつかのPrologシステム(例えばSWI)にこのライブラリは、このように、あなたのソースファイルを参照すると、警告につながる述語サブセット/ 2と、そしてこの警告、あなたはライブラリを使用するあなたの述語の名前を変更したりすることはできません(リスト)を取得し、例えば、メンバー/ 2のバージョンを実装しません:

subset([],_Y). 
subset([X|T],Y) :- 
    element_in(X,Y), 
    subset(T,Y). 

element_in(X,[X|_]). 
element_in(X,[Y|Ys]) :- 
    dif(X,Y), 
    element_in(X,Ys). 
+0

ありがとう!出来た。私はちょうど 'インクルード'を定義し、現在は期待どおりに動作しています。 –