述語 fill(L,X,N) を作成する必要があります。ここで、L は N 個の要素 X を含むリストです。N <= 0 または N != L の長さの場合、L は空リストにする必要があります。
これが私がやったことです。Prologでif、else..構造が正しく機能することはありませんでした:
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 = [] を返しません。