我有一个程序,其中有一个谓词用于将列表中某个元素的第一次出现替换为给定的新元素,并生成一个新列表。我的实现方式如下:
changeFst(OldE,[OldE|T],NewE,[NewE|T]):-!.
changeFst(OldE,[_|T],NewE,_):- changeFst(OldE,T,NewE,_),!.
例如,如果你输入(2,[1,2,3,4,2],10,X),它会返回X=[1,10,3,4,2]。现在我正在编写更改最后一个出现位置的代码(在示例中,它将返回X=[1,2,3,4,10])。以下是我的代码:
changeLast(OldE,OldL,NewE,NewL):-
reverse(OldE,X),
changeFst(OldE,X,NewE,NewL),
!.
这段代码实际上可以完美运行,但问题在于它返回了一个反转后的列表(在我的示例中,它返回了[10,4,3,2,1]而不是[1,2,3,4,10])
我该如何将其再次反转以正确显示结果?
changeFst(o,[o,o],n,[o,n]).
成功了,但根据您的描述,它应该失败! - falsechangeFst(o,[o,o],n,[]).
成功了,但显然它应该失败。 - false