我有一个谓词variablize/3
,它接受一个列表并用一个变量依次替换每个项目,例如:
% ?- 变量([a,b,c], X, L)。 % L = [[X, b, c], [a, X, c], [a, b, X]]
现在我正在尝试扩展此谓词以接受变量列表,例如:
% ?- 变量([a,b,c], [X,Y], L)。 % L = [[X, Y, c], [X, b, Y], [a, X, Y]]
到目前为止,我的代码是:
替换_at([_|尾巴],X,1,[X|尾巴])。 replace_at([Head|Tail], X, N, [Head|R]) :- M 是 N - 1,replace_at(Tail, X, M, R)。 替换_每个([],_,_,[],_)。 replace_each([_|Next], 原点, X, [Res|L], N) :- replace_at(原点,X,N,Res), M 是 N + 1, replace_each(下一个,原点,X,L,M)。 variablize(I, X, L) :- replace_each(I, I, X, L, 1)。
任何指针?我是否扩展replace_at/4
了应该跳过的索引列表?