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...