List 列表操作序言
我已经用prolog编写了这些代码行List 列表操作序言,list,prolog,List,Prolog,我已经用prolog编写了这些代码行 extend([],[]). extend([(N,L)|T], [NewList|NewListT]):- fill((N,L),NewList), extend(T,NewListT). fill((N,L),List) :- length(List, N), maplist(=(L), List). 我试图做的事情是为给定的list=[(0,a)、(0,b)、(1,c)]创建一个list=[[c]]。 我的问题
extend([],[]).
extend([(N,L)|T], [NewList|NewListT]):-
fill((N,L),NewList),
extend(T,NewListT).
fill((N,L),List) :-
length(List, N),
maplist(=(L), List).
我试图做的事情是为给定的list=[(0,a)、(0,b)、(1,c)]
创建一个list=[[c]]
。
我的问题是,当我运行代码时,我得到了这个结果
L=[],[],[c]]
问题是extend/2
为传入列表的每个元素向结果中添加了一个列表。需要对非空列表进行筛选。如果我根据您的代码和示例正确理解了您的需求,那么这应该是可行的:
extend([],[]).
extend([(N,L)|T], NewListFinal):-
fill((N,L),NewList),
extend(T,NewListT),
(NewList=[]->NewListFinal=NewListT; NewListFinal=[NewList|NewListT]).
示例查询:
?- extend([(0, a), (0, b), (1, c)],L).
L = [[c]].
?- extend([(0, a), (3, b), (1, c)],L).
L = [[b, b, b], [c]].