Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programas
Unidad 4
Programación Funcional
• LISP fue creado por John McCarthy a finales de los 50's en el laboratorio
de Inteligencia Artificial del MIT, para un proyecto cuyo propósito era crear
“un sistema capaz de manejar oraciones tanto declarativas como
imperativas y exhibir un ‘sentido común’ al llevar a cabo las instrucciones”.
• Las listas habían probado ser una estructura de datos adecuada para el
procesamiento simbólico, así que McCarthy creó LISt Processing (LISP).
• LISP fue programado en la computadora IBM 704 que tenían en el MIT, pero
después surgieron varios dialectos, lo único que en ese entonces se podría
considerar un estándar fue la publicación de Lisp 1.5
• Otros lenguajes funcionales son: FP, FFP, KRC, Miranda, ML, SML, Haskell.
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP (LISt Processing)
Introducción:
• Una característica distintiva de LISP es su poderoso
conjunto de primitivas para el procesamiento de listas.
> (/ 8 4) 2
> (+ 2 3 8) 13
> (/ 8 4 2) 1
> (1+ 5) 6
> (MAX 3 8 9 5) 9
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP
Evaluación:
Los argumentos de una función u operación, pueden
ser no solo átomos sino también otras operaciones,
permitiendo así múltiples niveles de anidamiento.
> (+ 3 (* 4 2)) 11
> (+ (* 2 2) (/ 4 2)) 6
> (* (+ 1 2) (+ 3 (* 2 2))) 21
>A
ERROR
> (SETF A 5)
5
>A
5
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP
Asociación (SETF):
SETF no sólo asigna un valor a un átomo sino que
también retorna un valor (como todas las funciones
de Lisp). Con SETF se puede asignar a un átomo el
resultado de la evaluación de cualquier expresión.
>(SETF A (* (+ 1 2) (+ 3 (* 2 2))))
>A
21
> (SETF A 8)
> (SETF B 4)
> (/ A B)
>T T
>2 2
> (+ 2 3) 5
> '(+ 2 3) (+ 2 3)
> 'A A
>B (+ 2 3)
> 'B B
> (+ A 8) 13
> 'A A
>A B
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP
Evaluación adicional (EVAL):
> (EVAL A) C
>X (+ 2 3)
>(EVAL X) 5
> (REST A) (B C)
CONS:
• Toma como argumento una expresión y una lista
y retorna una lista cuyo primer elemento es la
expresión y los elementos restantes son los
elementos de la lista que se pasa como segundo
argumento.
> L1
(1 2 3)
> (ATOM A)
NIL
> (ATOM 'A)
T
> (NUMBERP (SECOND A))
T
> (LISTP A)
T
>(LISTP 'A)
NIL
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP- Predicados
De control de tipo de expresión:
> (> 4 4)
NIL
> (> 2 4)
NIL
> (> 8 4 2)
T
> (> 8 2 4)
NIL
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP- Predicados
Combinando con AND y OR:
(B C)
NIL
> (NOT T)
NIL
> (SETF A 5)
>(SETF A 9)
> (DOBLE 4)
8
>A
18
>(SETF N 6)
> (DOBLE 4)
8
>N
6
factorial(0) = 1
FACTORIAL
> (FACTORIAL 0)
1
> (FACTORIAL 3)
6
Ing. Carlos A. Afranllie 1 Desarrollo Sistemático de Programas
LISP – Recursión
Ej.: Implementar una función MIEMBRO que trabaje como
la primitiva MEMBER de Lisp.
INCREMENTAR1
(2 4 7 9)
(T NIL T)
INCREMENTAR1
POSICION