sábado, 20 de marzo de 2010

Funciones Lisp - parte 2

Mas funciones de Lisp



;realizar  una funcion lisp q  permita calcular el  producto de 2 numeros usando la  multiplicacion russa
(defun alg-ruso (n1 n2)
 (DO
  (
   (ACUM 0)
  )
  ( (ZEROP n1) ACUM)
  (setq ACUM (IF (ODDP n1)  (+ ACUM n2) ACUM))
  (setq n1 (floor (/ n1 2.0)) )
  (setq n2 (* n2 2))
 )
)

;REDIFINIR LA FUNCION LENGHT PARA CALCULAR LA LONGITUD O EL NUMERO  DE ELEMENTOS DE UNA  LISTA
(defun long-lista (Lista)
 (DO
  (
   (LAux Lista (cdr LAux))
   (N 0 (1+ N))
  )
  ((NULL LAux) N)
  ;si la condicion es NIL, pasa a este lado...
 )
)

;Funcion que invierte los valores de una lista
(defun reves (Lista)
 (DO
  (
   (LAux Lista (cdr LAux))
   (LInv nil (cons (car LAux) LInv))
  )
  ((NULL LAux) LInv)
 )
)