【发布时间】:2014-06-29 22:31:00
【问题描述】:
所以我有一个程序,它有一个谓词,用给定的新元素替换列表中某个元素的第一次出现并生成一个新列表。我已经这样做了:
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]).成功了,但是根据你的描述应该失败了! -
即使
changeFst(o,[o,o],n,[]).成功了,显然应该失败。
标签: list prolog element last-occurrence