是否可以用以下方式创建N
数组的0
元素:
makeInitialArray(N, A) :-
N > 0,
Nn is N-1,
makeInitialArray(Nn, B),
append([0], B, A).
makeInitialArray(0, []).
由于复发的事实,这对我的眼睛来说很糟糕。我想这将会经常调用这样的操作。
答案 0 :(得分:3)
保持简单!怎么样?委托"递归部分"内置/库谓词!
基于 length/2
,meta-predicate maplist/2
和 (=)/2
定义n_zeroes/2
:
:- use_module(library(lists), [maplist/2]). n_zeroes(N, Zs) :- length(Zs, N), maplist(=(0), Zs).
使用SICStus Prolog 4.3.2的示例查询:
| ?- 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...