Ejercicio_1.lsp



;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