用Prolog替换列表的元素

时间:2014-09-19 13:52:39

标签: prolog

如何用prolog替换列表中的任何元素?

示例:

replace(2,[1,2,3,2,1],5,X)

应该有两个解决方案:

  • X = [1,5,3,2,1]
  • X = [1,2,3,5,1]

1 个答案:

答案 0 :(得分:1)

你可以通过迭代输入列表来实现:

%replace(_, [], _, []).
replace(Element, [Element|Tail], NElement, [NElement|Tail]).
replace(Element, [CurElement|Tail], NElement, [CurElement|NTail]):-
  replace(Element, Tail, NElement, NTail).

示例输入:

?- replace(2,[1,2,3,2,1],5,X).
X = [1, 5, 3, 2, 1] ;
X = [1, 2, 3, 5, 1] ;

如果取消注释第一个子句,它也会输出输出列表保持不变的解决方案。

第一个子句(注释)是迭代列表的基本案例。它声明空列表的替换列表是空的。

第二个子句指出,如果列表的头部与Element统一,则替换列表将包含替换的元素和列表的其余部分(Tail)。

第三个子句是递归步骤,它接受第一个元素并使用列表的尾部递归调用,输出是与递归调用的结果连接的元素。