我正在编写一个 Prolog 谓词,它接受参数(A1,A2,L1,L2),如果 L1 中所有出现的 A1 都已更改为 L2 中的 A2,则成功。
IE:
| ?- replace(a, b, [a], X).
X = [b]
这是我写的:
replace(Orig,_,[Other],[Other]) :- Other \== Orig.
replace(Orig,Repl,[Orig],[Repl]).
replace(Orig,Repl,[Other|T1],[Other|T2]) :- Other \== Orig, replace(Orig,Repl,T1,T2).
replace(Orig,Repl,[Orig|T1],[Repl|T2]) :- replace(Orig,Repl,T1,T2).
现在,这可行,但似乎有点不雅。有没有更优雅的解决方案?
谢谢。