Lenguaje LISP
“LISP is an easy language to learn”
(Henry et al 1984)
et.al.,
1
1
Introducción
Origen: 1958
John McCarthy, pionero en IA, empezó
a t b j con l primera
trabajar
la i
implementación de Lisp en 1958.
» McCarthy, Recursive functions of symbolic
expressions and th i computation b
i
d their
t ti by
machine, Communications of the ACM, Vol
3, No 4, 1960.
22
Introducción
Uso habitual en Inteligencia Artificial
LISt Processing
Características básicas
» Lenguaje Interpretado
– También posible compilado
» Todas las variables son punteros
» Liberación automática de memoria
(automatic garbage collection)
» Efi i
Eficiencia menor que otros l
i
lenguajes
j
(causas: es interpretado, liberación
automática de memoria, ...).
»Adecuado para prototipados y cálculo
simbólico.
Nuevo paradigma de programación:
programación funcional
3
3
Datos
Expresiones LISP:
» Átomos
– Símbolos:
simbolo, simbolo3,ejemplo-de-simbolo
Especiales: nil, t
– Keywords (étiquetas):
:ejemplo, :keyword
– Strings (distinción minúsculas-mayúsculas)
“abc”, “ABC”, “string”
– Números:
enteros: 33, 4, -5
racionales: -3/5, 4/8
reales:3.23, -4.78, 3.33E45
» Listas
– Colecciones de expresiones
– (a b (c (d)) e), (), (3 “abc”)
Listas: Grupo de átomos. Las listas también se
pueden agrupar en niveles superiores.
4
4
Evaluación
Forma LISP: cualquier expresión evaluable (expresión
LISP)
Evaluación
» Una expresión es evaluable cuando devuelve un valor
Distinción entre operadores
» Funciones: evalúan todos susargumentos
» Macros: no evalúan todos los argumentos
– QUOTE
QUO
Macro: no evalúa su argumento
(quote (a b c)) >>> (A B C)
‘(a b c) equivale a (quote (a b c))
Ejemplos de evaluaciones
» Á
Átomos
– Símbolos:
Su evaluación es su valor como variable
T y NIL se evalúan a sí mismos
– Números, Strings y Keywords
Se evalúan a sí mismos
» Listas
– () se evalúa a NIL
– Una lista novacía evaluable debe tener como primer
elemento un símbolo
Notación prefijo. El primer
(+ 3 (+ 2 5))
elemento de una lista indica
(quote (a b c))
qué se desea hacer
(setf variable (+ 3 4))
5
5
Operadores de
manipulación de listas, I
El macro SETF admite como primer
argumento:
» U símbolo:
Un í b l
– (setf dias ‘(lunes martes miercoles))
» Una posición de memoria:
–(setf (second dias) ‘jueves))
jueves))
– dias >>> (LUNES JUEVES MIERCOLES)
Atención! Lista modificada!
– (setf (rest dias) ‘(viernes domingo))
– dias >>> (LUNES VIERNES DOMINGO)
– (setf (rest dias) dias) >>> (LUNES LUNES ....)
¡Cuidado!, listas circulares
(setf [ ] ... [ ])
Sirve para:
• Asignar valores a variables
• Modificar valores de componentes de listas, variables, etc.
66
Operadores de
manipulación de listas, II
Características comunes:
» Al evaluarlos, se obtiene error cuando se
aplican sobre datos que no siguen su
patrón sintáctico.
» La mayoría son funciones (no macros).
FIRST o CAR
» Devuelve el primer elemento de la lista
» (first )
» (first ‘(a b c)) >> A
SECOND, THIRD, ..., NTH
S CO
» (second )
– (second ‘(a b c)) >>> B
» (nth )– (nth 1 ‘(a b c)) >>> B
– Devuelve el elemento en la posición
de la
– Posición inicial: 0
– Si excede la dimensión de la lista
se devuelve NIL
7
7
Operadores de
manipulación de listas, III
REST o CDR
» Devuelve la lista sin el primer elemento
» ( t )
(rest li t )
» (rest ‘(a b c)) >> (B C)
NTHCDR
» (nthcdr )
» (nthcdr (+ 1 1) ‘(a b c)) >> (C)
(car (cdr (car ‘((a bc) d)))) >> B
» Es equivalente (cadar ‘((a b c) d))
» C_ _ _ R
_ = A (first) o D (rest)
Có o crear s as
Cómo c ea listas?
» cons
» append
» list
8
8
Operadores de
manipulación de listas, IV
CONS
» (cons )
» Crea una lista cuyo primer elemento es
y cuyo resto es
– (cons ‘(a b) ‘(c d e)) >>> ((A B) C D E)
APPEND
(cons ‘a (cons ‘b nil)) : construir una lista,...
Regístrate para leer el documento completo.