私は[a([x,y]), b([u,v])]
のようなリストを持っています。私の結果は[[x,y], [u,v]]
です。ここ は私のコードです:Prologリストのリストへの述語のリスト
p(L, Res) :-
findall(X, (member(a(X), L)), A1), append([A1],[],L1),
findall(Y, (member(b(Y), L)), A2), append(L1,[A2],L2),
append(L2, Res).
これは、部分的に良い結果を提供しますが、私のリストが[a([x,y]), c([u,v])]
であれば、私はあることを、結果を希望:[[x,y],[]]
、それが[[x,y]]
です。
より多くの例:
p([b([u,v]), a([x,y]), c([s,t]), d([e,f])], R)
私が得る結果:(予想通り)[[x,y],[u,v]]
。
p([b([u,v]), z([x,y]), c([s,t]), d([e,f])], R)
結果は[[u,v]]'
です。
結果:[[],[u,v]]
です。
EDIT:さらに多くの例を追加しました。ヘッド 用語の主ファンクタに対応する原子であり、その尾部期間の引数のリストであるリストを
'アペンド([A1]、[]、L1は)'です'[A1] = L1'と同じですか? – lurker
はい、同じです。 – zaig
'[b([x、y])、a([u、v])]'があれば?あなたの述語は '[[u、v]、[x、y]]'を生成します。それは正しい結果ですか? 'findall/3'ではなく' maplist'を使うことを検討すべきです。 – lurker