問題
作成したすべての新しいリストをリストの 1 つのスーパー リストに移動しようとしています。代わりに、出力は個別に変更された一連のリストとしてフォーマットされます。
この問題は、私がandbetween
を割り当てるために使用しているという事実に起因する可能性がありますが、他に何ができるかわかりません。Iterations
Size
入力
placeRedBlocks(4, X), loopReplace(X, Y), append([X], [Y], Z).
期待
Z = [[b, b, b, b], [r, r, r, b], [r, r, r, r], [b, r, r, r]]
現実
X = [b, b, b, b],
Y = [r, r, r, b],
Z = [[b, b, b, b], [r, r, r, b]]
X = [b, b, b, b],
Y = [r, r, r, r],
Z = [[b, b, b, b], [r, r, r, r]]
X = [b, b, b, b],
Y = [b, r, r, r],
Z = [[b, b, b, b], [b, r, r, r]]
false
コード 説明
このプロローグ コードは、値のリストを受け取り、指定された値を置き換えて、それを別のリストに返します。
placeRedBlocks(Length, List) :-
findall('b', between(1, Length, _), List).
replace([_|T], 0, X, [X|T]).
replace([H|T], I, X, [H|R]):-
I > -1,
NI is I-1,
replace(T, NI, X, R), !.
replaceX(A,_,0,_,A):- !.
replaceX(Line,Index,NumElm,Elm,NLine) :-
replace(Line,Index,Elm,BLine),
Index1 is Index+1,
NumElm1 is NumElm-1,
replaceX(BLine,Index1,NumElm1,Elm,NLine).
loopReplace(ListToReplace, NewList) :-
length(ListToReplace, Len),
TotalCount is Len-3,
between(0, TotalCount, Iterations),
between(3, Len, Size),
replaceX(ListToReplace, Iterations, Size, 'r', NewList).
でreplaceX
:
Line
は、値を置換しようとしているリストです。Index
は、値の置換を開始するリスト内の位置です。NumElm
は、置換する要素の総数です。Elm
リスト内の他の値を置き換える文字または数字です。NLine
出力先のリストです。