• ベストアンサー

prologのプログラムについて

?- ss([3,4,1,2,5],[1,2],X) X=[3,4,5] ?- ss([car(X,Y),car(Z,W)],[car(a,b),car(c,d),train(a),car(e,g)],List) List=[train(a),car(e,f)] List=[car(c,d),train(a)] List=[car(a,b),train(a)] ?- ss(X,[1,2],[3,4]) X=[1,2,3,4] となるようなprologのプログラムをつくりたいです。 丸一日、試行錯誤したのですが、結果どおりに動いてくれません。 分かる方がいらっしゃいましたら、教えていただけませんでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

% del_elm(Elem, Set, Set) del_elm(E, X, Y) :- append(X1,[E|X2], X),append(X1,X2,Y). % ss(SetA,SetB,SetA-B) ss(X,[],X). ss(X,[Y|V],Z) :- del_elm(Y,X,U), ss(U,V,Z). てな感じでどうでしょう

hama2005
質問者

お礼

返事が遅くなり、申し訳ありません。回答ありがとうございます。 早速、動かしてみます。

その他の回答 (1)

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

>> ?- ss([car(X,Y),car(Z,W)],[car(a,b),car(c,d),train(a),car(e,g)],List) この部分あってますか? ?- ss([car(a,b),car(c,d),train(a),car(e,g)],[car(X,Y),car(Z,W)],List) List=[train(a),car(e,g)] List=[car(c,d),train(a)] List=[car(a,b),train(a)] だったら分かりますけど。 もしそうだとしたら、ss(X,Y,Z) という述語は、Y と Z のリストを append したものが X なんですよね?

hama2005
質問者

お礼

回答ありがとうございます。 指摘の部分は、最初に書いたものであってます。 なるほど、XはYとZのappendと考えればいいのですね。

関連するQ&A