Beruflich Dokumente
Kultur Dokumente
PROGRAMACIÓN
EJERCICIOS DE LISP
K
H = ∑ pi log pi
i=1
((TREN) (ANTONIO))
((TREN) ANTONIO)
1.9 Definir una función que tenga por argumento una lista y
devuelva el tercer elemento de dicha lista.
1.10 Definir una función que tenga por argumento una lista y
devuelva otra lista con el primer y último elemento de la lista.
Ejemplo:
> (ROTAIZQ ‘( A B C ))
(B C A)
1.15 Definir una función que tomando como argumentos una lista
y un elemento, devuelva T si el elemento aparece más de una vez
en la lista.
1.20 Definir una función que devuelva cierto (T) si alguno de sus
tres argumentos no es divisible por 2.
(K L F K L M)
(B D F K L M)
Por ejemplo:
> (AGRUPAR ‘(A A A B B B C C C) ‘B)
(A A A B B B B C C C )
F(1) = 1
(1 2 3 9 2 3 4 3 4 7)
1.35 Definir una función que reciba como argumento una lista de
números y devuelva otra lista cuyos elementos sean los cuadrados
de los anteriores.
1.41 Definir una función que añada un átomo a una lista que se le
pasan como argumentos a la función.
Modificar la función anterior de forma que el átomo que se le
pasa como argumento sea opcional. En caso de que no se
especifique en la llamada el átomo, se añadirá a la lista un átomo
cualquiera.
1.42 Definir una función que tome como argumentos una lista y
un número variable de átomos y devuelva una lista con los
resultados de aplicar la función MEMBER con cada uno de los
átomos y la lista.
88 APÉNDICE: EJERCICIOS DE PROGRAMACIÓN
1.43 Definir una macro MI-IF que reciba tres argumentos, siendo
el tercero opcional; si el primero es cierto devuelve el segundo, si
no devuelve el tercero o NIL si éste no existiera.
1.46 Definir mediante una macro una función iterativa que realice
algo (el cuerpo) un número de veces. Suponer que la llamada a la
función se hace de la siguiente forma:
(DOTIMES ( <var> <cont> <result> ) <cuerpo>)
(A B (LIST ‘C ‘D) (E F) G H)
… … … … …)
<cuerpo> )
1.50 Una pila puede ser considerada como una lista a la que
puede accederse mediante las operaciones INTRODUCIR que
añade un nuevo elemento al principio de la lista que representa la
pila y SACAR que obtiene el primer elemento de dicha lista.
Definir ambas operaciones mediante el uso de macros.
1.53 Definir una macro que añada un átomo al final de una lista
1.69 Definir una función que reciba como argumento una lista de
tabuladores (enteros que indican las columnas en que debería
comenzarse la escritura). El procedimiento debe leer un átomo y
escribir cada una de sus letras en la columna especificada en la
lista de tabuladores. Considérese que en la lista aparece un
número suficiente de tabuladores como para asignar uno a cada
letra, y que los enteros que aparecen en la lista de tabuladores
aparecen ordenados en orden creciente.
casados
hijos
Jose Perez Elena Rodriguez Eva Rodriguez
casados
hijos
Jaime Perez Belen Perez Alba Perez
(* (+ A B) (- C (/ D E)))
30
2.8 Una empresa desea organizar todas las facturas que posee de
cada uno de sus clientes:
a) Crear una estructura CLIENTE que contenga los campos
NOMBRE, DIRECCION, RAZON-SOCIAL, NUMERO-DE-
EJERCICIOS AVANZADOS DE LISP 99
NUMERO-DE-FACTURAS: 10
DESPACHO DORMITORIO
COCINA VESTIBULO
SALON
Por ejemplo:
> (POSIBILIDADES ‘VESTIBULO)
Por ejemplo:
> (TERMINO ‘NORTE ‘COCINA)
DESPACHO
2.10 Definir una función LISP que carge un fichero que contiene
una base de reglas (las reglas de los llamados sistemas basados en
el conocimiento tienen el formato: “Condición → Acción”.
Suponer que la condición de las reglas está formada por un
conjunto de cláusulas unidas por las conectivas AND y OR.
Condición ≡ C1 and C2 and C3
Por otro lado, la acción puede estar formada por más de una
cláusula unidas mediante la conectiva AND.
102 APÉNDICE: EJERCICIOS DE PROGRAMACIÓN
A1 and A3
A1
PA: AÑADIR-SUMA
especie mamífero
sonido maullido
ATRIBUTO: sonido
VALOR: maullido
EJERCICIOS AVANZADOS DE LISP 105
ATRIBUTO: movimiento
VALOR: galopar