N长度的列表

时间:2016-06-03 22:24:31

标签: list prolog

是否可以用以下方式创建N数组的0元素:

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

由于复发的事实,这对我的眼睛来说很糟糕。我想这将会经常调用这样的操作。

1 个答案:

答案 0 :(得分:3)

保持简单!怎么样?委托"递归部分"内置/库谓词!

基于 length/2 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...