Рекурсия в лисп - Lisp
Формулировка задачи:
Добрый вечер!
Задание таковое нужно со списка (a b c d e f g h) => ((h a) (g b) (f c) (e d))
нужно сделать через рекурсию
у меня тут получилось , но можно ли сделать более проще? если конечно можно, спасибо
(defun fun (lst) (cond ( (null lst) nil) (T (cons (list (car (reverse lst)) (car lst)) (fun (reverse (cdr (reverse (cdr lst)))))) ) ) ) (setq x '(a b c d e f g h)) (print (fun x))
Решение задачи: «Рекурсия в лисп»
textual
Листинг программы
(defun edge-backward-pair (w) (when w (cons (append (last w) (list (car w))) (edge-backward-pair (butlast (cdr w)))))) > (edge-backward-pair '(a b c d e f g h)) ((H A) (G B) (F C) (E D))
Объяснение кода листинга программы
В данном коде определён функционал для получения обратных пар ребра в направленном графе.
(defun edge-backward-pair (w)
— определение анонимной функции с именемedge-backward-pair
, которая принимает один аргументw
.(when w (cons (append (last w) (list (car w))) — если
wне равно
nil, то рекурсивно вызывается функция
edge-backward-pairдля
wс
cdr wв качестве аргумента. — иначе, возвращается
nil`.(edge-backward-pair (butlast (cdr w))))
— рекурсивный вызов функцииedge-backward-pair
дляbutlast (cdr w)
в качестве аргумента.(cons (append (last w) (list (car w))))
— конструкторcons
создаёт новый список, где первый элемент —append (last w) (list (car w))
, а второй элемент — результат рекурсивного вызова функцииedge-backward-pair
дляw
сcdr w
в качестве аргумента.(last w)
— возвращает последний элемент спискаw
.(car w)
— возвращает первый элемент спискаw
.(butlast (cdr w))
— возвращает список, который является результатом удаления последнего элемента изcdr w
.(append (last w) (list (car w)))
— возвращает новый список, который является результатом объединения списка, возвращаемогоlast w
, и списка, возвращаемогоcar w
.(edge-backward-pair '(a b c d e f g h))
— вызывает функциюedge-backward-pair
с аргументом(a b c d e f g h)
.((H A) (G B) (F C) (E D))
— возвращаемый результат вызова функцииedge-backward-pair
с аргументом(a b c d e f g h)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д