在Prolog中将列表的部分替换为另一部分

时间:2017-12-14 09:50:19

标签: replace prolog substitution

我想在Prolog的列表中将b,c替换为x,y,z。我有一个列表[a,b,c,d,e,f],结果将是[a,x,y,z,d,e,f]。我怎样才能在Prolog中写这个?

replace([],_,[]).
replace([x|T1],Var,[Y|T2]):-
      member(X=Y,var),
      !
   ;  X=Y
   ),
   replace(T1,Var,T2).

-? replace([a,b,c,d,e,f],[b,c=x,y,z],R).

1 个答案:

答案 0 :(得分:0)

这基本上等同于replacing substrings in Prolog的问题。使用replace_substring/4谓词,您可以通过以下方式替换列表的子序列:

:- initialization(main).
:- set_prolog_flag(double_quotes, chars). 

main :-
    replace_substring([a,b,c,d,e,f],[b,c],[x,y,z],Result),
    writeln(Result).

replace_substring(String, To_Replace, Replace_With, Result) :-
    append([Front, To_Replace, Back], String),
    append([Front, Replace_With, Back], Result).

此程序将打印[a,x,y,z,d,e,f]