我试图通过限制每个元素的长度来使用maplist来过滤元素列表,这就是我尝试过的方法
maplist(atom_length(2,X),[aa,bb,cc,asd],Result).
ERROR: apply:maplist_/3: Undefined procedure: atom_length/4
ERROR: However, there are definitions for:
ERROR: atom_length/2
我希望得到
Result = [aa,bb,cc]
需要一点帮助。感谢。
答案 0 :(得分:0)
提供所需功能的谓词是findall_member/4
。您可以在Richard O'Keefe Prolog library proposal中找到此谓词的描述和实现。例如:
| ?- findall_member(Atom, [aa,bb,cc,asd], atom_length(Atom,2), Result).
Result = [aa, bb, cc]
yes
findall_member/4
谓词的第三个参数是一个测试,应用于列表的每个成员以过滤结果。
答案 1 :(得分:0)
关于Paulo答案的澄清:你可以结合库谓词,比如
?- findall(X, (member(X,[aa,bb,cc,asd]),atom_length(X,2)), L).
L = [aa, bb, cc].
member/2
充当生成器,atom_length/2
充当过滤器。