有限数の要素でいくつかのリストを初期化する必要がありますが、すべて同じです。
fill( 0, [], _ ) :- !.
fill( Index, [Value|List], Value ) :-
NextIndex is Index - 1,
fill( NextIndex, List, Value ).
無限再帰と失敗の結果を避けるために、カットは必須です。
ルール #2 を変更しようとしましたが、予想される解決策を示した後、目標は失敗します。
fill( Index, [Value|List], Value ) :-
Index > 0,
NextIndex is Index - 1,
fill( NextIndex, List, Value ).
使い方:
?- fill( 7, AllFalse, false ).
AllFalse = [false, false, false, false, false, false, false].
?-