nlattessi

Seminario_TP4_EJ10

May 23rd, 2012
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 0.79 KB | None | 0 0
  1. (defun cant (l)
  2.     (if (null l)
  3.         0
  4.         (if (atom (car l))
  5.             (+ 1 (cant (cdr l)))
  6.             (cant (cdr l))
  7.         )
  8.     )
  9. )
  10.  
  11. (defun reemplaza (l a b &optional (salida nil))
  12.     (if (null l)
  13.         salida
  14.         (if (and (eq (car l) a) (> 1 (cant (cdr l))))
  15.             (append (append salida (list b)) (cdr l))
  16.             (reemplaza (cdr l) a b (append salida (list (car l))))         
  17.         )
  18.     )
  19. )
  20.  
  21. (defun ultimo (l &optional (salida nil))
  22.     (if (null l)
  23.         salida
  24.         (if (atom (car l))
  25.             (ultimo (cdr l) (car l))
  26.             (ultimo (cdr l) salida)
  27.         )
  28.     )
  29. )
  30.  
  31. (defun intercambia (l)
  32.     (if (> 2 (cant l))
  33.         l
  34.         (if (atom (car l))
  35.             (cons (ultimo l) (reemplaza (cdr l) (ultimo l) (car l)))
  36.             (cons (car l) (intercambia (cdr l)))
  37.         )
  38.     )
  39. )
  40.  
  41. (defun intercambiaTN (l)
  42.     (if (atom l)
  43.         l
  44.         (mapcar 'intercambiaTN (intercambia l))
  45.     )
  46. )
Advertisement
Add Comment
Please, Sign In to add comment