0

我正在尝试使用 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]

需要一点帮助。谢谢。

4

2 回答 2

0

只是对 Paulo 答案的澄清:您可以组合库谓词,例如

?- findall(X, (member(X,[aa,bb,cc,asd]),atom_length(X,2)), L).
L = [aa, bb, cc].

member/2充当生成器,atom_length/2充当过滤器。

于 2014-10-07T14:42:12.647 回答
0

提供所需功能的谓词是findall_member/4. 您可以在Richard O'Keefe Prolog 库提案中找到该谓词的描述和实现。例如:

| ?- findall_member(Atom, [aa,bb,cc,asd], atom_length(Atom,2), Result).
Result = [aa, bb, cc]
yes

谓词的第三个参数findall_member/4是一个测试,应用于列表的每个成员以过滤结果。

于 2014-10-07T14:27:09.807 回答