如何用prolog替换列表中的任何元素?
示例:
replace(2,[1,2,3,2,1],5,X)
应该有两个解决方案:
X = [1,5,3,2,1]
X = [1,2,3,5,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)。
第三个子句是递归步骤,它接受第一个元素并使用列表的尾部递归调用,输出是与递归调用的结果连接的元素。