我正在尝试在Prolog中编写以下谓词,而不使用append/3
:
lastTwoReversed(List, ListOf2)
当 ListOf2
恰好包含按照倒序排列的 List
的最后一个元素和倒数第二个元素时,该函数将返回成功。
然而,我不知道从哪里开始。欢迎任何帮助。
你可以编写一个简单的递归谓词,并使用模式匹配在由两个元素组成的列表上进行基本情况的匹配,代码如下:
last_two_reversed([X,Y],[Y,X]).
因为这可能是一道作业题,所以我认为最好让你自己尝试编写递归子句。
只需使用内置的谓词reverse/2
:
last_two_reversed([A,B|T],[Y,X]) :-
reverse([A,B|T],[Y,X|_]).
last_two_reversed([],[]).
last_two_reversed([H],[H]).
lastTwoReversed([],[]).
lastTwoReversed([X],[X]).
lastTwoReversed([X,Y],[Y,X])
。
最后,针对长度为3或更大的列表,请编写以下内容:lastTwoReversed([X,Y,Z|T],[X|T1]):-lastTwoReversed([Y,Z|T],T1).