List N个长度的列表

List N个长度的列表,list,prolog,meta-predicate,List,Prolog,Meta Predicate,是否可以用以下方法以外的另一种方法创建0数组的N元素: makeInitialArray(N, A) :- N > 0, Nn is N-1, makeInitialArray(Nn, B), append([0], B, A). makeInitialArray(0, []). 由于复发的事实,这对我的眼睛来说是一种糟糕的方式。我想这样的行动会经常发生 保持简单!怎么用?将“递归部分”委托给内置/库谓词 基于、和定义n_零/2: :- use_module(li

是否可以用以下方法以外的另一种方法创建
0
数组的
N
元素:

makeInitialArray(N, A) :-
   N > 0,
   Nn is N-1,
   makeInitialArray(Nn, B),
   append([0], B, A).
makeInitialArray(0, []).

由于复发的事实,这对我的眼睛来说是一种糟糕的方式。我想这样的行动会经常发生

保持简单!怎么用?将“递归部分”委托给内置/库谓词

基于、和定义
n_零/2

:- use_module(library(lists), [maplist/2]). n_zeroes(N, Zs) :- length(Zs, N), maplist(=(0), Zs).
复发根本不是什么问题。。也许有其他方法可以做到这一点,但它也将基于某个时刻的重复。
| ?- n_zeroes(10, Zs).
Zs = [0,0,0,0,0,0,0,0,0,0] ? ;
no
| ?- n_zeroes(N, Zs).
N = 0, Zs = [] ? ;
N = 1, Zs = [0] ? ;
N = 2, Zs = [0,0] ? ;
N = 3, Zs = [0,0,0] ? ;
N = 4, Zs = [0,0,0,0] ? ;
N = 5, Zs = [0,0,0,0,0] ? 
...                             % ...goes on forever and ever...