> 1 <

Автор Сообщение

xol

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#8445   2020-05-01 22:33 GMT+3 часа(ов)      
Начинаю изучать рекурсию. Увидел пример на сайте IBM в статье
Цитата

Красота Lisp
Брюс Тэйт
Опубликовано 06.03.2007/Обновлено: 06.03.2007


. Хотелось бы понять, в какой последовательности что куда передается, как входит и выходит.
Работаю в Clisp 2.49.
(defun total2 (lst)
(labels ((total-rec (tot lst)
(if lst (total-rec (+ tot (first lst)) (rest lst)) tot)))
(total-rec 0 lst)))


Код для примера[9]>
(total2 '(2 4))
6
[10]> (total2 '())
0


Загружаю командой
(load "c:/a1.lisp")


На странице вот что написано, только это не сильно облегчает понимание сейчас
Цитата

Функция total в листинге 9 принимает список в виде единственного аргумента. Первое выражение if останавливает рекурсию, если список пуст, возвращая ноль. Если нет, функция добавляет первый элемент к сумме остальной части списка. Здесь можно увидеть, почему first и rest сделаны именно такими. first может извлечь первый элемент из списка, а rest облегчает применение концевой рекурсии (tail recursion - тип рекурсии, использованной в листинге 9) к оставшимся элементам.
> 1 <


Онлайн :

0 пользователь(ей), 42 гость(ей) :