;EJERCICIOS DE LA PRACTICA UNO ;------------------------------------------------------------ ; ; ; ;___EJERCICIO 1.1 ; Escribir una funciOn que reciba una lista de nUmeros y retorne una lista de nUmeros ; sumAndole su posiciOn a cada nUmero de la lista. ; > (suma-posicion '(1 3 7 -2)) ; > (2 5 10 2) ;__________________________________________________________________ (defun uno(Lista) (setq N 1) (setq Salida '()) (dolist (elemento Lista) (setq elemento (+ elemento N)) (SETQ SALIDA (append Salida (LIST elemento))) (setq N (+ N 1)) ) salida ) ;___EJERCICIO 1.2 ;___________________________________________________ ; Escribir la funciOn calcula-diferencia que recibe una lista de nUmeros y devuelve ; otra lista con la diferencia entre un nUmero y su sucesor en la lista. (El ; Ultimo elemento no cuenta) ; > (calcula-diferencia '(10 6 2 5 -4)) ; > (4 4 -3 9) ;__________________________________________________________________ (defun dos(Lista) (setq N 1) (setq Salida '()) (dolist (elem Lista) (if (< N (length Lista)) (setq X (- elem (nth N Lista))) (return Salida)) (setq Salida (append Salida (List X))) (setq N (+ N 1)) ) ) ;___EJERCICIO 1.3 ;___________________________________________________ ; Escribir la funciOn separar-parimpar que recibe una lista de nUmeros y retorna una ; lista con una sublista de los pares y otra sublista con los impares. ; > (separar-parimpar '(1 2 3 5 6 8 9 11 12)) ; > ((12 8 6 2) (11 9 5 3 1)) ;__________________________________________________________________ (defun tres(Lista) (setq Pares '()) (setq Impares '()) (dolist (elem Lista) (if (evenp elem) (setq Pares (append Pares (list elem))) (setq Impares (append Impares (list elem))) ) ) (list Pares Impares) ) ; oddp: EVALUA SI EL NUMERO ES IMPAR ; evenp: EVALUA SI EL NUMERO ES PAR ;___EJERCICIO 1.4 ;___________________________________________________ ; Escribir la función cambiar-notacion que transforme una expresión ; con operaciones matemáticas escritas en notación funcional de LISP ; a su notación infija correspondiente. ; > (cambiar-notacion '(+ (* 7 4) (* 5 3) (- (/ 30 (* 2 3)) 1))) ; > ((7 * 4) + (5 * 3) + ((30 / (2 * 3)) - 1)) ;__________________________________________________________________ (defun cuatro (Lista) ) ; Ejemplo: (EsOperador +) ; regresa T o NIL (defun EsOperador (Operador) (setq ListaDeOperadores '(+ - * /)) (eql nil (member Operador ListaDeOperadores)) ) ;___EJERCICIO 1.10 ;___________________________________________________ ; Escribir una funciOn que a partir de una lista copie en un archivo inversa.txt ; la lista y la versiOn invertida de la misma. ; > (guardar-lista-invertida '(w x y z )) ; > nil ;__________________________________________________________________ (defun diez (Lista) (setq r 0) ; cualquier cosa solo para definir a r -respuesta- (setq Invertida nil) ; lista vacia (dolist (x Lista R) ; recorre la lista (push x Invertida) ; anexa a Invertida por el frente ) (with-open-file (Flujo "Rafa.txt" :direction :output) (print "lista original" Flujo) (print Lista Flujo) (print "lista invertida" Flujo) (print Invertida Flujo) ) ) ; reverse: INVIERTE UNA LISTA