Общее определение для предиката last/2
, предоставляющего доступ к последнему элементу списка:
last([Head| Tail], Last) :-
last(Tail, Head, Last).
last([], Last, Last).
last([Head| Tail], _, Last) :-
last(Tail, Head, Last).
При вызове с первым аргументом, связанным с закрытым списком, вспомогательный предикат, last/3
, избегает ложных точек выбора, предполагая, что система Prolog реализует обычную индексацию первого аргумента. Можете ли вы изменить этот предикат, чтобы делать то, что вы хотите?