You are on page 1of 37

Universidad de Guadalajara

Centro Universitario de la Ciénega

Manual de Practicas Taller de Programación


Lógica y Funcional
Nombre:_______________________________________________________________.

Código:____________________________Firma:______________________________.
Introducción: Pondrá en práctica el aprendizaje del taller, siguiendo adecuadamente las
indicaciones de cada uno de los ejercicios indicados, escribiendo las soluciones correctas,
además de corroborarlos en el compilador para su ejecución adecuada.

Objetivo: El alumno reafirmara los conocimientos adquiridos en el taller, plasmándolo en


los ejercicios propuestos en el presente manual.
1.- ¿Qué es programación Lógica?

2.- ¿Qué es programación Funcional?


3.- Observa detenidamente las imágenes que se te muestran y da una breve descripción
indicando para que sirve cada una de ellas dentro del compilador de LISP.

3
2
1.

2.

3.
4.- Realizar operaciones aritméticas en Lisp.

 ¿Cómo es la notación para sumar?

 ¿Cómo es la notación para restar?

 ¿Cómo es la notación para multiplicar?

 ¿Cómo es la notación para dividir?

 ¿Cómo es la notación para realizar varias operaciones anidadas

p/ejemplo:

1240 x 3
( ------------ ) + 902
230 - 52
5.- Utilizando la función primitiva SETF genera 7 listas que lleven por nombre: vocales,
números, frutas, nones, pares, ropa y verduras.

6.- Utilizando las funciones First y Rest, realiza su ejecución con su sintaxis
correspondiente, evaluando la lista generada Vocales.
7.- continuando con las primitivas First y Rest, realiza las siguientes evaluaciones
escribiendo correctamente la instrucción para llegar a tal resultado:

 ¿Quién es el primer elemento de vocales?

 ¿Quién es el primer elemento de números?

 ¿Quién es el primer elemento de frutas?

 ¿Quién es el primer elemento de pares?

 ¿Quién es el primer elemento de nones?

 ¿Quién es el primer elemento de verduras?

 ¿Quién es el primer elemento de ropa?


8.- Ahora con las funciones Length y Reverse efectúa las evaluaciones correspondientes
siguiendo su sintaxis tomando en cuenta la lista generada Nones.
9.- Tomando en cuenta e siguiente ejemplo referente a las primitivas CONS, APPEND y
LIST, efectúa la incursión del número 10 a la lista Pares, tomando en cuenta que dicho
elemento debe estar ubicado al último de la lista.

Ejemplo:

CL-USER 23 > (cons pares nones)

((2 4 6 8) 1 3 5 7 9)

CL-USER 24 > (append pares nones)

(2 4 6 8 1 3 5 7 9)

CL-USER 25 > (list pares nones)

((2 4 6 8) (1 3 5 7 9))
10.- Indudablemente que hay elementos que no deben existir dentro de una lista, para
esto existen instrucciones primitivas de Lisp que realizan la eliminación de tales
elementos, tomando en cuenta que dichas funciones solo lo realizan en tiempo de
ejecución, por lo que las listas involucradas no tendrán modificación alguna, salvo exista
la utilización de una o mas funciones que provoquen la modificación real de ella, a
continuación realizaras la evaluación de las funciones Nthcdr y ButLast, tomando como
referencia la lista Frutas.
11.- Escriba las instrucciones para:

Unir los primeros elementos de las listas Vocales, Números, Frutas, Pares, Nones. La lista
resultante será:

(A 0 PERA 2 1)
¿Cómo hacerle?
 Unir el primer elemento de vocales con primero de números
= (A 0)
 Ese resultado unirlo anidándolo con frutas
= (A 0 PERA)
 Ese resultado unirlo anidándolo con pares
= (A 0 PERA 2)
 Ese resultado unirlo anidándolo con nones
= (A 0 PERA 2 1)
12.- Escribe la instrucción para unir los ULTIMOS elementos de las listas: Vocales,
Números, Frutas, Pares, Nones.

La lista resultante será: (U 9 SANDIA 8 9)


13.- En la Ventana de Editor escriba lo siguiente ->

(setf Pedro ‘((ojos verdes) (estatura 1.80) (tez morena)))

(setf Luís ‘((ojos azules) (estatura 1.85) (tez blanca)))

(setf Mario ‘((ojos negros) (estatura 1.90) (tez obscuro)))

(setf Animales ‘(perro gato león ratón tigre vaca gallo zorro))

(setf cinco 5)

(setf seis 6)

(setf siete 7)

(setf ocho 8)

(setf nueve 9)
Guarde el archivo con el nombre de elección.

Compile y Cargue, opción dentro del menú archivo.

Ejecute cada una de las listas en la ventana de Listener para corroborar si ya


corresponder a los valores descritos.

Utilizando la función Assoc tomando en cuenta que esta instrucción busca datos de
asociación. Escriba en la ventana de Listener lo siguiente:

CL-USER > (assoc 'ojos pedro)

(OJOS VERDES)

Ahí se le pregunta al compilador: ¿Qué color de ojos tiene Pedro?... Para lo cual
responde: “ojos verdes”
Escribe las instrucciones necesarias para resolver las siguientes preguntas:

 1.- ¿Qué estatura tiene Luis?

 2.- ¿Qué color de ojos tiene Mario?

 3.- ¿Qué color de tez tiene Pedro?

 4.- ¿Qué estatura tiene Pedro?


14.- La función Member, Busca si algún dato es miembro en alguna lista. Escriba la
siguiente instrucción en la ventana de Listener:

CL-USER> (Member 'Gallo Animales)


(GALLO ZORRO)
Ahí se esta preguntando: ¿Gallo es miembro de animales? … Genera como Respuesta
(Gallo Zorro) porque cuando lo encuentra devuelve el elemento encontrado MAS todos los
elementos restantes.
Escribe las instrucciones necesarias para resolver las siguientes preguntas:
 5.- ¿Es miembro Perro de Animales?

 6.- ¿Es miembro Ratón de Animales?

 7.- ¿Es miembro Coyote de Animales?


15.- Combinando MEMBER con AND, OR, NOT, Escriba en la ventana de Listener la
siguiente pregunta:

¿León Y Vaca son miembros de Animales?

CL-USER> (and (member 'León Animales) (member 'Vaca Animales))

(VACA GALLO ZORRO)

Ahora preguntemos ¿La Vaca Y el León son miembros de Animales?

CL-USER> (and (member 'Vaca Animales) (member 'León Animales))

(LEON RATON TIGRE VACA GALLO ZORRO)


En relación al ejemplo anterior, analice minuciosamente las instrucciones escritas y la
respuesta otorgada, para responder las siguientes preguntas:

 ¿Por qué en ambas preguntas se plasma la vaca y el león y la respuesta es


diferente?

 Cambia el operador AND y escribe ahora el operador OR, ¿Cuál es la respuesta


que otorga y porque?

 Escribe la instrucción necesaria para preguntar ¿El Ratón Y el Chango, son


miembros de Animales?
 Escribe la instrucción necesaria para preguntar ¿El Chango Y el Ratón, son
miembros de Animales?

 ¿Cuál es la diferencia entre las 2 preguntas anteriores?

 Escribe la instrucción necesaria para preguntar ¿El Ratón O el Chango, son


miembros de Animales?

 Escribe la instrucción necesaria para preguntar ¿El Chango O el Ratón, son


miembros de Animales?
 ¿Cuál es la diferencia entre las 2 preguntas anteriores?

 Redacta con tu creatividad una pregunta para utilizar el Operador NOT, y cual
seria la instrucción correspondiente para solucionar esa pregunta
16.- Tomando en cuenta la siguiente tabla donde se explica el significado de las
funciones ahí plasmadas realiza lo siguiente:

EQUAL El valor de los 2 argumentos es la misma expresión?

EQL El valor de los 2 argumentos es el mismo símbolo o


numero?

EQ El valor de los 2 argumentos es el mismo símbolo?

= El valor de los 2 argumentos es el mismo numero?


En la ventana de Listener ejecute las instrucciones que se te muestran a continuación y
da una breve explicación del porque del resultado arrojado por el compilador:

 CL-USER > (equal cinco 5)


T
 CL-USER > (equal cinco 5.0)
NIL
 CL-USER > (eql seis 6)
T
 CL-USER > (eql seis 6.0)
NIL
 CL-USER > (eq siete 7)
T
 CL-USER > (eq siete 7.0)
NIL
 CL-USER > (= ocho 8)
T
 CL-USER > (= ocho 8.0)
T
17.- Antes que nada, recuerde para que sirve la instrucción DEFUN y revise cual es su
sintaxis. Imagine que con una palabra deseada, nos genere una lista de esa palabra
generada 5 veces. Un ejemplo: Si decido la palabra MESA, tiene que dar como resultado
una lista de la siguiente manera:
(MESA MESA MESA MESA MESA)

Tendría que escribir la instrucción:

(cons 'mesa (cons 'mesa (cons 'mesa (list 'mesa 'mesa))))

Pero.... Si se decide ahora por la palabra SILLA, tendría que escribir:

(cons ‘silla (cons ‘silla (cons ‘silla (list ‘silla ‘silla))))

Y... Cada vez que se desee otra palabra distinta, tendría que anotar una instrucción muy
larga, solo para modificar la palabra deseada.

Por lo tanto define una función que se llame 5Veces, con la cual se puede realizar esa
lista sin necesidad de estar cambiando la palabra cada ves que se desee modificar.
18.- En lisp cuando se anotan las primitivas +1 o -1 incrementa o decrementa un numero
en 1. Usando estas primitivas, escribe un procedimiento recursivo que reciba 2
argumentos (serán números).

La función se llamará SUMAR que incremente o decremente un numero en 1, del valor


que contenga en ese momento.

X ... será el numero que se incrementara o decrementara

Y ... será el numero hasta donde llegara el incremento o decremento.


19.- Hacer una función que reciba un argumento (una cantidad numérica) y que saque la
serie fibonaci del número que le corresponde.

Por ejemplo: La serie fibonacci :

1, 2, 3, 4, 5, 6, 7, 8, 9, 10 …

1, 2, 3, 5, 8, 13, 21, 34, 55, 89 …..


20.- Hacer un procedimiento que convierta un numero decimal en un numero binario, que
reciba un argumento (una cantidad numérica), la convierta a binario y muestre el
resultado.

Por ejemplo:

(ConvertirDecBin ‘16) -- se aclara que el 16 es numero decimal

Resultado= (1 0 0 0 0)
21.- Utilizando las instrucciones que creas necesarias realiza las siguientes funciones de
conversión:

 Elaborar una función que convierta de Binario a Decimal

 Elaborar una función que convierta de Decimal a Octal


 Elaborar una función que convierta de Octal a Decimal

 Elaborar una función que convierta de Decimal a Hexadecimal

 Elaborar una función que convierta de Hexadecimal a Decimal.


22.- ¿Cuales son las características principales del Lenguaje de Programación Prolog?

23.- ¿Cómo se conforma Prolog?


24.- ¿Cuáles son los tipos de datos que maneja Prolog?

25.- De los dos tipos de Symbols que existen da un ejemplo de cada uno de ellos
26.- Da un ejemplo del tipo de dato String, tomando en cuenta su sintaxis.

27. – Da un ejemplo del tipo de dato Integer.


28.- ¿Cuál es la simbología básica que maneja el lenguaje de programación Prolog?

29.- Desarrolla un ejemplo donde plasmes una declaración afirmativa, tomando en cuenta
la sintaxis correspondiente del lenguaje.
30.- Mediante un ejemplo realiza la sintaxis de un Hecho

31.- A que se refiere cuando una variable esta instanciada o no instanciada.


32.- Con un ejemplo y respetando la sintaxis correspondiente, realiza una Regla

33.- PROLOG, al igual que la mayoría de lenguajes de programación modernos incorpora


predicados predefinidos para la entrada y salida de datos. Estos son tratados como reglas
que siempre se satisfacen. Da un ejemplo de tales instrucciones de E/S.
34.- Un programa Prolog está formado por una secuencia de enunciados: hechos, reglas
y comentarios. Una relación puede estar especificada por hechos, simplemente
estableciendo objetos que satisfacen la relación o por reglas establecidas acerca de la
relación. Cada regla está formada por un primer miembro (o la cabeza de la regla), un
segundo miembro (o cola de la regla) ligados por " :- " y termina con el carácter " . ".
Realiza un pequeño programa en el cual ubiques los apartados que conforman la
estructura de dicho proyecto. ** Hechos ** ** Relaciones ** ** Reglas **
35.- Como practica final, con los recursos necesarios de Prolog, realiza el programa en el
cual plasmes tu árbol genealógico, haciendo uso de todas las instrucciones vistas.