- ベストアンサー
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のプログラムをつくりたいです。 丸一日、試行錯誤したのですが、結果どおりに動いてくれません。 分かる方がいらっしゃいましたら、教えていただけませんでしょうか。
- みんなの回答 (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). てな感じでどうでしょう
その他の回答 (1)
- chirubou
- ベストアンサー率37% (189/502)
>> ?- 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 なんですよね?
お礼
回答ありがとうございます。 指摘の部分は、最初に書いたものであってます。 なるほど、XはYとZのappendと考えればいいのですね。
お礼
返事が遅くなり、申し訳ありません。回答ありがとうございます。 早速、動かしてみます。