在Prolog中用一个一个替换列表的每个实例

时间:2018-04-28 04:00:06

标签: prolog

所以我有一个程序应该替换列表中的每个元素的实例,而不是一个一个。

E.g。

change_element(5,[1,5,9,12,5,6],3,X). should give 
X = [1,3,9,12,5,6] and 
X = [1,5,9,12,3,6]

所以它用3替换前5,然后在第二个输出中,前5个保持5,第二个变为3.

我能够实现代码来更改第一个元素,但代码在此之后终止。没有进入第二个元素。

change_element(A,[A|As],B,[B|As]).
change_element(A,[E|As],B,[E|Bs]):-
   dif(A, E),
   change_element(A,As,B,Bs).

任何想法,我应该采取哪些不同的方式来获得理想的结果?

1 个答案:

答案 0 :(得分:2)

在比赛结束后再继续,保留旧元素:

change_element(A,[A|As],B,[B|As]).
change_element(A,[A|As],B,[A|Bs]):-
   change_element(A,As,B,Bs).
change_element(A,[E|As],B,[E|Bs]):-
   dif(A, E),
   change_element(A,As,B,Bs).