需要做一个谓词,fill(L,X,N),其中 L 是一个包含 N 个元素 X 的列表。如果 N <= 0 或 N != L 的长度,L 应该是一个空列表。
这是我所做的,我从来没有能够让 if, else.. 结构在 Prolog 中正常工作:
fill(L,X,N) :-
((N =< 0) ->
L = [];
length(L,I),
((N =\+= I) ->
L = [];
fill2(L,X,N))).
fill2([H|T],X,N2) :-
NewN = N2 - 1,
H = X,
fill2(T,X,NewN).
我还有一个更简单的版本,除了 N != L 的长度时有效
fill(L,_,N) :-
N =< 0,
L = [].
fill([H|T],X,N) :-
NewN = N - 1,
H = X,
fill(T,X,NewN).
因此,例如,fill(L,20,4) 返回 L = [20,20,20,20],但 fill([20,20,20],X,2) 不返回 L = []。