List 用prolog将整数添加到列表N次
我试图将一个整数N次附加到一个列表中。到目前为止,我知道如何附加两个列表,我正在尝试使用该调用递归调用,以便它附加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.
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].
谢谢你,保罗。很简单:)谢谢保罗。很简单:)谢谢,那也很有用谢谢,那也很有用