使用prolog附加一个整数列表N次

时间:2016-03-19 17:39:00

标签: 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.

% Expected Result

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

4 个答案:

答案 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]