基于其他列表在prolog中创建列表

时间:2017-08-17 19:42:39

标签: prolog

我是prolog的初学者,我想编写一个基于另一个列表创建列表的代码。我写道:

<span>${links.join(' / ')}</span>

我想获得一个大小等于5(K)的列表,其中填充零,除了在输入列表中指定的值为-1的位置(我没有反转它)。

1 个答案:

答案 0 :(得分:1)

我认为您的代码应该是 - 请注意列表是在 head 中构建的,以避免反转)

create(_     ,N,K,    []) :- N > K, !.
create([N|Xs],N,K,[-1|L]) :- !, N1 is N + 1, create(Xs,N1,K,L).
create(   Xs ,N,K,[ 0|L]) :-    N1 is N + 1, create(Xs,N1,K,L).

它需要对零位置进行排序。 否则,更惯用 - 和神秘 -

create(Ps, N,K, L) :- findall(D, (
    between(N,K,P),
    ( memberchk(P,Ps) -> D = -1 ; D = 0)), L).
无论订购如何,

都能正常工作。