- 632 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 05:03:35 ]
- >>630 二番目の質問はそれぞれのリストが集合を念頭に置かれたもので
あるかどうかで、述語の定義は変わってきます。それぞれが集合の場合は、 第一引数、第二引数のそれぞれに於いては重複する要素はありませんから、 >>631のappendの定義をちょっとだけ変形して 和集合([],X,X). 和集合([U|X],Y,[U|Z]) :- \+(member(U,Y)),和集合(X,Y,Z). 和集合([U|X],Y,Z) :- member(U,Y),和集合(X,Y,Z). で実現できてしまいます。 つぎに、第一引数と第二引数自体に重複があり得る場合は、 重複を取り除く([],[]). 重複を取り除く([A|R1],[A|R2]) :- \+(member(A,R1)),重複を取り除く(R1,R2). 重複を取り除く([A|R1],R2) :- member(A,R1),重複を取り除く(R1,R). を定義しておいて、 和集合(L1,L2,L3) :- append(L1,L2,L4),重複を取り除く(L4,L3).
|

|