有没有办法使用库函数删除列表的最后一个元素?

时间:2018-07-11 16:14:54

标签: prolog

说我要删除列表的最后一个元素。我可以使用append/3

append(WithoutLastElement, [_], List)

但是,这留下了一个选择点!例如,尝试使用append(X, [_], [1, 2])

我可以编写自己的谓词(取from here

list_butlast([X|Xs], Ys) :-
  list_butlast_prev(Xs, Ys, X).

list_butlast_prev([], [], _).
list_butlast_prev([X1|Xs], [X0|Ys], X0) :-  
  list_butlast_prev(Xs, Ys, X1).

但是我想知道是否有一种使用内置方法的方法,append/3解决方案的优点是大约需要2秒钟来阅读和理解正在发生的事情。 list_butlast_prev需要更多思考。

我正在使用SWI-Prolog,希望能从那里获得答案,但我也很好奇其他Prologs是否有可能。

1 个答案:

答案 0 :(得分:0)

append/3->/2结合使用,即:

(append(WithoutLastElement, [_], List)->true)

例如包装在一个过程中

list_butlast(List, ListWithoutLast):-
  (append(ListWithoutLast, [_], List)->true).