我正在尝试编写一个交换第一个和最后一个元素的程序.
该函数有2个参数.列表和变量,显示为新交换的列表.
我以为我是以懒惰的方式做这件事,但事实证明这对我来说同样艰难.
我要抓住头部,把它放在一边 - 抓住尾巴的最后一个元素,把它放在一边 - 取尾巴,取出最后一个元素,也把它放在一边,然后将所有3个附加在一起制作一个清单
我在删除尾巴的最后一个元素时遇到了麻烦.
我有这样的事情:
swap( [H|T], Y ) :-
% GET HEAD, LAST OF TAIL, AND TAIL WITH LAST ELEM REMOVED
% GET HEAD (NEW LAST ELEMENT)
H = NEW_LASTELEMENT,
% GET LAST ELEMENT (LAST OF TAIL, WILL BE NEW HEAD)
last(T,X), X = NEWHEAD,
% CUT END OF TAIL OFF
cutlast(T, Z), REST OF CODE . . .
.
% CUT LAST
cutlast([H | T], [H | T2]) :- T = [_|_], cutlast(T, T2).
Run Code Online (Sandbox Code Playgroud)
我从网上借用了cutlast谓词,但我不确定它是如何工作的.我已经测试了将参数传递给它一小时了,它们都会继续返回false.任何帮助表示赞赏.
可能只是:
swap(A, B) :-
append([First | Mid], [Last], A),
append([Last | Mid], [First], B).
Run Code Online (Sandbox Code Playgroud)
如果需要,可以使用一个元素和空列表成功的其他事实:
swap([X], [X]).
swap([], []).
Run Code Online (Sandbox Code Playgroud)