Prolog 查找与第一个输入元素成对的列表的长度
我需要实现一个可以Prolog 查找与第一个输入元素成对的列表的长度,prolog,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] 如何修改现有功能以返回值-数字对。您可以向maplist传递一个谓词,执行适当的操作,如 size_sub(A,Ls):- maplist(list_sym_len,A,Ls). list_sym_len([Sym|Rest
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]
如何修改现有功能以返回值-数字对。您可以向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]].
您需要将不同的谓词传递给
maplist
,而不是length
。编写一个谓词,比如,reduce([a,a,a],[a,3]):-…
,在给定[a,a,a]
时生成[a,3]
。如果已经假设所有元素都相同,那么这应该很容易。然后调用映射列表(reduce,A,Ls)。
。