说我要删除列表的最后一个元素。我可以使用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是否有可能。
答案 0 :(得分:0)
将append/3
与->/2
结合使用,即:
(append(WithoutLastElement, [_], List)->true)
例如包装在一个过程中
list_butlast(List, ListWithoutLast):-
(append(ListWithoutLast, [_], List)->true).