задача с использованием рекурсии и циклов - Lisp

Формулировка задачи:

необходимо реализовать задачу 2 вариантами: 1.с помощью рекурсии 2.с помощью циклов. Определить функцию, осуществляющую несколько замен х на у в исходном списке по ассоциативному списку: ((x1.y1)(x2.y2)(x3.y3).....)

Код к задаче: «задача с использованием рекурсии и циклов - Lisp»

textual
;; рекурсивная версия
 
(defun to-repl-r (x asso-list)
  (cond ((null asso-list) x)
        ((eq x (caar asso-list)) (cdar asso-list))
        (t (to-repl-r x (cdr asso-list)))))  
 
==> TO-REPL-R
 
(to-repl-r 'x '((z . 1) (x . 2) (y . 3)))
 
==> 2
 
(to-repl-r 'r '((z . 1) (x . 2) (y . 3)))
 
==> R
 
;; Циклическая версия
 
(defun to-repl-l (x asso-list)
   (dolist (a asso-list x)
     (when (eq (car a) x) (return (cdr a)))))
 
==> TO-REPL-L
 
(to-repl-l 'r '((z . 1) (x . 2) (y . 3)))
 
==> R
 
(to-repl-l 'y '((z . 1) (x . 2) (y . 3)))
 
==> 3

8   голосов, оценка 4.250 из 5


СОХРАНИТЬ ССЫЛКУ