我试图将一个整数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]
答案 0 :(得分:2)
另一种可能性:
?- length(L,6),maplist(=(3),L).
L = [3, 3, 3, 3, 3, 3].
答案 1 :(得分:2)
另一个解决方案,只是为了好玩,不推荐,糟糕的可移植性,但我喜欢循环术语:
?- length(List, 7), Cyclic = [3| Cyclic], prefix(List, Cyclic).
List = [3, 3, 3, 3, 3, 3, 3],
Cyclic = [3|Cyclic].
答案 2 :(得分:1)
假设您可以使用标准的内置和库谓词:
?- I = 3, N = 7, findall(I, between(1,N,_), L).
I = 3,
N = 7,
L = [3, 3, 3, 3, 3, 3, 3].
答案 3 :(得分:1)
你可以尝试这个简单的解决方案而不附加谓词;
编辑:
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]