2016-12-18 3 views
0

Вот код, который обратный список рекурсивен в LISP:Список обратного рекурсивно

(defun rev1(list final) 
    (if (eq list()) 
    final 
     (rev1(cdr list) (cons (car list) final)))) 

(defun rev(list) 
    (rev list nil)) 

Может кто-нибудь объяснить мне, как уступку между консом ячейкой и переменными финальными работами? Является ли это указателем на голову (автомобиль) этой камеры?

ответ

1

Финал - это нуль в начале, и вы просто игнорируете первый элемент списка на нем каждый раз. , например. у вас есть список say '(a b c), и первый запуск сделает окончательный вариант' (a), и рекурсивный вызов будет (rev1 '(b c)' (a)) соответственно.

И тогда это выглядит следующим образом: (rev1 «(с)» (ба))

это продолжается, и когда список отсутствует, конечная переменная «(CBA), который вы хотите ,

Смежные вопросы