logo
ЛОИИ методичка 2015

Использование накапливающего параметра

Пример: реверс списка

  1. исходный список, 2 – результирующий список

Базовый случай: если список пуст, то результат – пустой список.

Общий случай – результат – реверсированный хвост исходного списка, к которому прикреплен процедурой append список, содержащий голову.

rev([],[]).

rev([X|Xs],Y):-

rev(Xs,Z),

append(Z,[X]).

Алгоритм можно оптимизировать, добавив накапливающий параметр. Если завести стек, то можно в него на каждом шаге заносить голову списка, а когда он исчерпается, сразу выдать содержимое стека.

rev1([X|Xs],Acc,Ys):-

rev1(Xs,[X|Acc],Ys).

rev1([], Acc,Acc).

rev2(L1,L2):-rev1(L1,[],L2).

    1. Yandex.RTB R-A-252273-3
      Yandex.RTB R-A-252273-4