-------------------
# 1
-------------------
OBJETIVOS
Que el alumno repase los conocimientos básicos del lenguaje de programación LISP,
aprendidos en la asignatura de Paradigmas de Programación, con el fin de estar mejor
capacitado para enfrentarse a las prácticas de Inteligencia Artificial


ENTREGA
El trabajo realizado será entregado
                -----------------------------
                S I N        P R O R R O G A
                -----------------------------

Las funciones realizadas deberán tener los nombres correspondientes a los ejemplos
mostrados luego de cada ejercicio



EJERCICIOS
-----------

________________________________________________________________
1. Escribir una función que reciba una lista de números y retorne una lista de números
sumándole su posición a cada numero de la lista.
> (suma-posicion ’(1 3 7 -2))
> (2 5 10 2)

________________________________________________________________
2. Escribir la función calcula-diferencia que recibe una lista de números y devuelve
otra lista con la diferencia entre un número y su sucesor en la lista. (El último elemento
no cuenta)
> (calcula-diferencia ’(10 6 2 5 -4))
> (4 4 -3 9)


________________________________________________________________
3. Escribir la función separar-parimpar que recibe una lista de números 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))


________________________________________________________________
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))


________________________________________________________________
5. Escribir una función que a partir de los elementos de una lista cree un conjunto de
todos los posibles pares ordenados
> (pares-ordenados '(a b c ))
> ((A . B) (A . C) (B . A) (B . C) (C . A) (C . B))


________________________________________________________________
6. Dada la siguiente estructura
(defstruct punto
   (valx 0)
   (valy 0))
Escribir una función que reciba como parámetros 2 puntos y calcule la distancia
entre ellos.
> (distancia-puntos (make-punto :valx 8 :valy 6) (make-punto))
> 10


________________________________________________________________
7. Escribir una función que convierta una lista de números en un vector de números
con los mismos elementos.
>(array-to-vector '(1 2 3 4 6 7))
> #(1 2 3 4 6 7)


________________________________________________________________
8. Escribir una función que determine si una lista de números esta ordenada o no.
>(is-ordenada '(1 3 5 7 10))
>T
>(is-ordenada '(1 3 15 5 7))
> NIL
>(is-ordenada '(15 11 3))
>T


________________________________________________________________
9. Escribir la función que divida una lista en 2 partes iguales y retorne una lista con las
2 nuevas sublistas (Si la cantidad de elementos es impar la primera sublista deberá
tener un elemento más).
> (dividir-lista '(a b c d e))
> ((a b c) (d e))
> (dividir-lista '(1 2 3 4 5 6))
> ((1 2 3) (4 5 6))


________________________________________________________________
10. Escribir una función que a partir de una lista copie en un archivo “inversa.txt” la lista
y la versión invertida de la misma.
> (guardar-lista-invertida '(w x y z ))
> nil