List 用prolog将整数添加到列表N次

List 用prolog将整数添加到列表N次,list,prolog,List,Prolog,我试图将一个整数N次附加到一个列表中。到目前为止,我知道如何附加两个列表,我正在尝试使用该调用递归调用,以便它附加N倍的整数 我已经试过: append([],L,L). append([H|T],L2,[H|L3]) :- append(T,L2,L3). list(X,N,L,L2) :- N>0, append([X],L,L2), N is N-1, list(X,N,L2,L3). % Test of the code 1 ?- list(3,6,A,B). false.

我试图将一个整数N次附加到一个列表中。到目前为止,我知道如何附加两个列表,我正在尝试使用该调用递归调用,以便它附加N倍的整数

我已经试过:

append([],L,L).
append([H|T],L2,[H|L3]) :- append(T,L2,L3).

list(X,N,L,L2) :- N>0, append([X],L,L2), N is N-1, list(X,N,L2,L3).

% Test of the code

1 ?- list(3,6,A,B).
false.

% Expected Result

[3,3,3,3,3,3]

假设您可以使用标准内置谓词和库谓词:

?- I = 3, N = 7, findall(I, between(1,N,_), L).
I = 3,
N = 7,
L = [3, 3, 3, 3, 3, 3, 3].

假设您可以使用标准内置谓词和库谓词:

?- I = 3, N = 7, findall(I, between(1,N,_), L).
I = 3,
N = 7,
L = [3, 3, 3, 3, 3, 3, 3].

您可以尝试这个简单的解决方案,而无需附加谓词

编辑:

gen_list(_,0,[]) :-!. %  or : gen_list(I,1,[I]) :-!.
gen_list(I,N,[I|Is]) :- 
         N1 is N-1,
         gen_list(I,N1,Is).
测试:

| ?- gen_list(3,6,L).
L = [3,3,3,3,3,3]

您可以尝试这个简单的解决方案,而无需附加谓词

编辑:

gen_list(_,0,[]) :-!. %  or : gen_list(I,1,[I]) :-!.
gen_list(I,N,[I|Is]) :- 
         N1 is N-1,
         gen_list(I,N1,Is).
测试:

| ?- gen_list(3,6,L).
L = [3,3,3,3,3,3]

还有一种可能性:

?- length(L,6),maplist(=(3),L).
L = [3, 3, 3, 3, 3, 3].

还有一种可能性:

?- length(L,6),maplist(=(3),L).
L = [3, 3, 3, 3, 3, 3].

另一个解决方案,只是为了好玩,不推荐,可移植性差,但我确实喜欢循环术语:

?- length(List, 7), Cyclic = [3| Cyclic], prefix(List, Cyclic).
List = [3, 3, 3, 3, 3, 3, 3],
Cyclic = [3|Cyclic].

另一个解决方案,只是为了好玩,不推荐,可移植性差,但我确实喜欢循环术语:

?- length(List, 7), Cyclic = [3| Cyclic], prefix(List, Cyclic).
List = [3, 3, 3, 3, 3, 3, 3],
Cyclic = [3|Cyclic].

谢谢你,保罗。很简单:)谢谢保罗。很简单:)谢谢,那也很有用谢谢,那也很有用