如何多次通过同一列表循环此功能?

时间:2017-12-01 03:24:29

标签: loops prolog

我有这个代码来遍历列表中的替换字符:

build.gradle

如果我给它一个替换列表,例如:

replace([_|T], 0, X, [X|T]).
replace([H|T], I, X, [H|R]):- 
  I > -1,
  NI is I-1,
  replace(T, NI, X, R), !.
replace(L, _, _, L).

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+1,Elm,NLine).

我得到replaceX([b, b, b, b, b], 1, 3, r, Y).

如何一次多次执行此操作才能获得以下内容?

Y = [b, r, r, r, b],

1 个答案:

答案 0 :(得分:0)

我使用此函数来循环我之前的代码,虽然它有自己的错误,我会尝试在另一个线程中修复。

loopReplace(ListToReplace, Size, NewList) :-
    length(ListToReplace, Len),
    TotalCount is Len-2,
    between(0, TotalCount, Iterations),
    replaceX(ListToReplace, Iterations, Size, 'r', NewList).

示例输入:

placeRedBlocks(5, X), loopReplace(X, Y).

输出:

X = [b, b, b, b, b],
Y = [r, r, r, b, b]
X = [b, b, b, b, b],
Y = [b, r, r, b, b]
X = [b, b, b, b, b],
Y = [r, r, r, r, b]
X = [b, b, b, b, b],
Y = [b, r, r, r, b]
X = [b, b, b, b, b],
Y = [r, r, r, r, r]
X = [b, b, b, b, b],
Y = [b, r, r, r, r]
X = [b, b, b, b, b],
Y = [b, r, r, r, b]
X = [b, b, b, b, b],
Y = [b, r, r, r, r]
X = [b, b, b, b, b],
Y = [b, r, r, r, r]
X = [b, b, b, b, b],
Y = [b, b, r, r, r]
X = [b, b, b, b, b],
Y = [b, b, r, r, r]
X = [b, b, b, b, b],
Y = [b, b, r, r, r]
相关问题