查找与第一个输入元素配对的List的长度

时间:2015-11-08 23:23:18

标签: prolog

我需要实现一个可以

的谓词
size_sub([[a,a,a],[b,b]],X).
and returns 
[a,3],[b,2]

到目前为止我所取得的成就

size_sub(A,Ls):-
maplist(length,A,Ls).
returns 
[3,2]

如何修改现有功能以返回值编号对。

1 个答案:

答案 0 :(得分:3)

你可以传递给maplist一个谓词做适当的事情,比如

size_sub(A,Ls):-
    maplist(list_sym_len,A,Ls).
list_sym_len([Sym|Rest], [Sym, Len]) :- length([Sym|Rest], Len).

或使用库lambda。在SWI-Prolog中,您可以使用

获取它
?- pack_install(lambda).

安装后,您有时可以简写您的定义

:- use_module(library(lambda)).
?- maplist(\[Sym|Rest]^[Sym,Len]^length([Sym|Rest], Len), [[a,a,a],[b,c]],R).
R = [[a, 3], [b, 2]].