使用X []填充列表(空列表)

时间:2012-04-26 23:12:06

标签: prolog

fillwith(X,List2):-
    length(List2,Y)
    ,Y>=X;
    append(List2,[[]],List3)
    ,fillwith(X,List3).

这里的问题是,一旦它到达目标它开始它做一些奇怪的事情,它会回到它所做的第一个调用。 例如:

fillwith(3,List2):-
    length(List2,Y)
    ,Y>=X;
    append(List2,[[]],List3)
    ,fillwith(X,List3).

这里是第一次调用List2 = [[]],在第二次调用list2 = [[],[]]中,在第三次调用list2 = [[],[],[]]。 然而,当它达到它开始(我想回到赛道),我最终只有第一个电话。

2 个答案:

答案 0 :(得分:1)

fillwith(X,List2):- 
   must_be(nonneg, X),
   length(List2, X),
   maplist(=([]), List2).

如果您希望追加,请使用:

fillwith(X, List2), append(List1, List2, List3).

答案 1 :(得分:1)

我仍然不确定,你想要什么,但是根据评论,你只需要:

fillwith(X, Nils) :-
   length(Nils, X),
   nils(Nils).

nils([]).
nils([[]|Nils]) :-
   nils(Nils).

目标nils(Nils)可以平均表示为maplist(=([]),Nils)

?- fillwith(4, Xs).
Xs = [[], [], [], []].

?- fillwith(X, Xs).
X = 0,
Xs = [] ;
X = 1,
Xs = [[]] ;
X = 2,
Xs = [[], []] ;
X = 3,
Xs = [[], [], []] ;
X = 4,
Xs = [[], [], [], []] ...