-1

嗨,有人可以帮我解决序言中的这个问题:

我在序言 penultimo 中有这个

([1,2,3,4,5],X) 

我必须得到这个

X = [1,2,3,5]

我必须删除列表的最后一个元素。

请帮我!

4

2 回答 2

1

我猜你的代码中有两个案例,是吗?- 一个用于到达列表末尾,一个用于处理列表末尾。

您知道如何编写代码来删除 Last 元素,对吧?- 这(通常)在“结束”情况下完成,它查看最后一个元素,忽略它,并(通常)返回一个空列表,用作通过递归通过先前调用的谓词构造答案列表的基础。

提示:你可以让“结束”案例看两个元素而不是一个元素吗?

于 2013-09-26T08:37:28.037 回答
1

当然,有几种方法:

使用 append 解构/重建列表(低效):

delete_prelast(L, R) :- append(H, [_,X], L), append(H, [X], R).

来自(修改)评论,更有效:

quitapenultimo([_,X],[X]) :- !.
quitapenultimo([X|T],[X|R]) :- quitapenultimo(T,R).

产量

?- quitapenultimo([1,2,3,4,5],R).
R = [1, 2, 3, 5].
于 2013-09-26T08:40:24.977 回答