prolog给出了Undefined过程:atom_length / 4

时间:2014-10-07 14:03:35

标签: prolog maplist

我试图通过限制每个元素的长度来使用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]

需要一点帮助。感谢。

2 个答案:

答案 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充当过滤器。