SlideShare una empresa de Scribd logo
Lenguaje de Programación LISP
LISP (List Processing) es un lenguaje diseñado para la manipulación de fórmulas simbólicas. Más
adelante, nació su aplicación a la Inteligencia Artificial. La principal característica de LISP es su
habilidad de expresar algoritmos recursivos que manipulen estructuras de datos dinámicos.
En LISP existen dos tipos básicos de datos, los átomos y las listas. Todas las estructuras definidas
posteriormente son basadas en estos.
Átomo: es un elemento indivisible que tiene significado propio.
Ej.: A , 54 , 3.14 , + , lunes , sol
Los átomos 54 y 3.14 son átomos numéricos y los otros son átomos simbólicos.
Lista: consta de un paréntesis izquierdo, seguida por cero o más átomos o listas, y un paréntesis
derecho. Cada componente de la lista se denomina elemento.
Ej.: (a 23 (8 hola ( ) ) 3.1) lista con 4 elementos
La lista nula tiene la característica de ser lista y átomo a la vez , y se representa por:
( ) o bien NIL.
Los valores de verdad están representados por el átomo T y el átomo NIL que representan el
verdadero y falso respectivamente.
LISP también tiene otros tipos de datos como ser caracteres, arreglos, cadenas y estructuras.
La notación matemática en LISP es prefija. Ej.: (+ 2 3) para sumar 2 + 3
FUNCIONES PRIMITIVAS
- Selectores de elementos de una lista
1) CAR o bien FIRST aplicado a una lista devuelve el primer elemento de la lista
Ej.: (CAR '(1 2 3) ) → 1
(FIRST '((a b) 8 (6)) ) → (a b)
2) CDR o bien REST aplicado a una lista devuelve la lista original sin el primer elemento
Ej.: (CDR '(1 2 3) ) → (2 3)
(REST '((a b) 8 (6)) ) → (8 (6))
Página 1 de 12
Como en las matemáticas las funciones pueden agruparse y una función puede ser parámetro de otra
función, aplicándose desde la función mas interna hacia afuera.
Ej.: (CAR (CDR (CDR '(a b c d) ) ) ) → c
Ej.: (CADDR '(a b c d) ) → c
3) NTH aplicado a una lista y un número devuelve el elemento ubicado en la posición indicada por
el número
Ej.: (NTH 3 '(a b c d) ) → d
4) NTHCDR devuelve el n–ésimo CDR de una lista a partir del numero indicado
Ej.: (NTHCDR 1 '(a b c) ) → (b c)
- Función QUOTE
La función QUOTE evita la evaluación de su argumento devolviéndolo sin evaluar.
Ej.: (QUOTE (a b c) ) → (a b c)
Se puede usar el apóstrofo como abreviatura para QUOTE . Por lo tanto la expresión que sigue es
equivalente a la anterior.
Ej.: '(a b c) → (a b c)
El hecho de proporcionar el apóstrofo como una abreviatura para QUOTE, se considera una manera
de refinamiento sintáctico.
- Constructores de listas
1) (CONS <obj> <lista>) devuelve una nueva lista donde el primer elemento es el
objeto y los elementos restantes son los de la lista original
Ej.: (CONS 'a '(1 2 3) ) → (a 1 2 3)
2) (APPEND <lista> <lista>) devuelve una nueva lista uniendo los elementos de
de las listas argumento
Ej.: (APPEND '(a b) '(1 2 3) ) → (a b 1 2 3)
3) (LIST <obj1> <obj2> ... <objn>) devuelve una nueva lista cuyos elementos son
los argumentos
Página 2 de 12
Ej.: (LIST 'a 'b '(1 2 3) ) → (a b (1 2 3))
Ejemplo que muestra la diferencia entre las tres:
(CONS '(a b) '(1 2 3) ) → ((a b) 1 2 3)
(APPEND '(a b) '(1 2 3) ) → (a b 1 2 3)
(LIST '(a b) '(1 2 3) ) → ((a b) (1 2 3))
- Reconocedores de objetos
1) ATOM predicado que verifica si su argumento es un átomo
Ej.: (ATOM 'a ) → T (ATOM '(a b) ) → NIL
2) SYMBOLP predicado que verifica si su argumento es un átomo no numérico
Ej.: (SYMBOLP 'a ) → T (SYMBOLP 5 ) → NIL
3) NUMBERP predicado que verifica si su argumento es un átomo numérico
Ej.: (NUMBERP 'a ) → NIL (NUMBERP 5 ) → T
4) LISTP predicado que verifica si su argumento es una lista
Ej.: (LISTP 'a ) → NIL (LISTP '(a b) ) → T
5) NULL predicado que verifica si su argumento es la lista nula
Ej.: (NULL '() ) → T (NULL '(a b) ) → NIL
6) CONSP predicado que verifica si una lista no es nula
Ej.: (CONSP '() ) → NIL (CONSP '(a b) ) → T
7) LENGTH cuenta el número de elementos del nivel superior que hay en la lista
Ej.: (LENGTH '() ) → 0 (LENGTH '(a b (X Y)) ) → 3
- Funciones aritméticas : + , - , * , / , expt (potencia) , rem (resto) , sqrt (raíz
cuadrada)
- Funciones booleanas : AND , OR , NOT
Página 3 de 12
- Funciones relacionales: eq , < , > , <= , >=
EXPRESIONES CONDICIONALES
1) (IF <expr1> <expr2> <expr3>)
El valor del condicional IF es el valor de la <expr2> si el valor de <expr1> es T o bien
el valor de la <expr3> si el valor de la <expr1> es NIL.
Ej.: (IF (> a b) (CAR X) (+ a b) )
2) (COND (<expr11> <expr12>)
(<expr21> <expr22>)
...
(<exprn1> <exprn2>)
)
El valor del condicional COND será:
el valor de la <expr12> si el valor de la <expr11> es T
el valor de la <expr22> si el valor de la <expr21> es T y <expr11> es NIL
...
el valor de la <exprn2> si el valor de la <exprn1> es T y todas las <exprx1>
anteriores son NIL
Ej.: (COND ((> a b) (CAR L) )
((AND (EQ a 5) (< b 3)) (CDR L) )
(T (+ a b) )
)
3) (CASE <expr>
(<cte1> <expr1>)
(<cte2> <expr2>)
...
[(otherwise <exprN>)]
)
El valor de la <expr> siempre debe ser un átomo y las constantes deben ser átomos o listas.
El valor del CASE será:
el valor de la <expr1> si el valor de la <expr> es igual (eq) a la <cte1> o bien el valor de la
<expr> pertenece a la lista <cte1>
el valor de la <expr2> si el valor de la <expr> es igual (eq) a la <cte2> o bien el valor de la
<expr> pertenece a la lista <cte2> y <expr> no es igual o pertenece a <cte1>
...
el valor de la <exprN> si la última constante es otherwise o bien T
Ej.: (CASE 3
(1 'a)
(2 'b)
Página 4 de 12
(3 'c)
(t 'z) ) → c
Ej.: (CASE 'hola
((uno hola dos) 8)
((tres cuatro) 9)
((cinco seis siete) 10)
(otherwise 22)
) → 8
Ej.: (DEFUN PP (N)
(CASE N
(1 'PRIMERO)
(2 'SEGUNDO)
((3 4 5) 'POSTERIOR)
) )
> (PP 2) → SEGUNDO
> (PP 4) → POSTERIOR
OBJETOS FUNCIONALES
- Funciones definidas por el programador
(DEFUN <nombre> (parámetros) <cuerpo>)
Ej.: (DEFUN Sig (N)
(+ N 1) )
Ej.: (DE Fact (N)
(IF (EQ N 0)
1
(* N (Fact (- N 1)))
)
)
Existe la posibilidad de usar parámetros opcionales con valores por defecto
(DEFUN <nombre> (<parámetros> &optional (<parám op> <valor>)...(<parám op>
<valor>))
<cuerpo>
)
Ej.: (DEFUN lista_num (x &optional (z NIL) )
(COND ((NULL x) z)
((NUMBERP (CAR x)) (lista_num (CDR x) (CONS (CAR x) z)) )
(T (lista_num (CDR x) z) )
)
)
> (lista_num '(a b 3 y 8 9 d) ) → (3 8 9)
Página 5 de 12
Aquí el segundo parámetro es opcional, o sea que la función lista_num se puede invocar con uno o
con dos argumentos. Si se la invoca con un solo argumento, el valor del segundo parámetro es el
valor establecido en la definición o sea que para este caso sería z = NIL
- Funciones de asignación
1) (SET 'simb s) asigna, destruyendo cualquier asignación previa, el valor de la expresión s al
símbolo simb. Devuelve el valor de s.
Ej.: (SET 'X (+ 1 5) ) → 6
> X → 6
Ej.: (SET (IF (= 1 2) 'A 'B) 3 ) → 3
> A → ERROR
> B → 3
2) (SETQ simb1 s1 simb2 s2 ... simbN sN) es como SET, pero se permiten asignaciones
múltiples y no se evalúan los símbolos. Devuelve el valor de sN. SETQ viene a ser como SET QUOTE.
Ej.: (SETQ X 3 Y (+ X 2) ) → 5
> Y → 5
> X → 3
3) (MAKUNBOUND simb) borra el valor asignado a simb.
Ej.: (SETQ A '(x y z) ) → (x y z)
> A → (x y z)
> (MAKUNBOUND 'A) → A
> A → ERROR
- Funciones anónimas
((LAMBDA <lista parámetros> <cuerpo>) <valore parámetros>) No reciben un nombre,
se evalúan solamente cuando se encuentran en el programa y no quedan registradas como funciones
en la tabla de símbolos.
Ej.: ((LAMBDA (x) (+ x 1) ) 5 ) → 6
Ej.: ((LAMBDA (x y) (+ x y) ) 2 3 ) → 5
Ej.: ((LAMBDA (n) (LIST n n)) 2) → (2 2)
Ej.: ((LAMBDA (X Y) (CONS Y X)) '(B) 'A) → (A B)
Página 6 de 12
- Formas funcionales
Las formas funcionales son funciones que tienen como parámetro otra/s función/es.
1) (EVAL <lista>) Devuelve el resultado de evaluar lo que se encuentre en la lista.
Ej.: (EVAL '(+ 2 3) ) → 5
Ej.: (CONS '+ '(2 3) ) → (+ 2 3)
(EVAL (CONS '+ '(2 3)) ) → 5
2) (MAPCAR <función> <lista>) Consiste en aplicarle la función a todos los elementos de la
lista obteniendo una nueva lista compuesta por los
resultados de esta aplicación en cada elemento.
Ej.: (MAPCAR 'ATOM '(a 1 (1 2)) ) → (T T NIL)
Ej.: (MAPCAR ’+ ’(1 2 3) ’(4 5 6)) → (5 7 9)
Ej.: (MAPCAR 'CONS '(a (b) c) '((m p) NIL (f)) ) → ((a m p) ((b)) (c f))
Ej.: (MAPCAR 'CDR '((a b) ((p)) (x (y))) ) → ((b) NIL ((y)))
Ej.: (DEFUN sum_vect (v1 v2) Suma de vectores
(MAPCAR '+ v1 v2) )
Ej.: (MAPCAR (LAMBDA (x) (* x 2) ) '(4 5 6) ) → (8 10 12)
Según el interprete de LISP con que se trabaje esta función se la puede encontrar con el nombre de
APPLY-TO-ALL
3) (APPLY <función> <lista>) Si la función que se especifica es monádica, la lista debe
contener un solo elemento, y el resultado es el valor que
devuelve la función aplicada a ese elemento.
Si la función que se especifica es diádica, la lista debe contener
solo dos elementos, y el resultado es el valor que devuelve la
función aplicada a esos dos elementos, etc...
Ej.: (APPLY 'car '((a b)) ) → a
Ej.: (APPLY 'cons '(a (1 2)) ) → (a 1 2)
Ejemplo del uso de APPLY dentro de una función:
Página 7 de 12
Vamos a escribir una función que aplicada a una lista dato y una lista que contiene nombres de
funciones vaya modificando la lista dato con las funciones de la segunda lista.
(Sería como una especie de robot, al cual le damos la materia prima y una lista de ordenes para que
aplique sobre la materia prima)
(DEFUN robot (objeto ordenes)
(IF (NULL ordenes) objeto
(robot (APPLY (CAR ordenes) (LIST objeto)) (CDR ordenes) )
)
)
> (robot '(a (b c) d) '(CDR CAR CDR) ) → (c)
Otra versión que solicita al usuario ingresar las ordenes:
(DEFUN robot (objeto ordenes)
(IF (NULL ordenes) objeto
(robot (APPLY ordenes (LIST objeto)) (READ))
)
)
> (robot '(a (b c) d) (READ) )
> CDR
> CAR
> CDR
> NIL
→ (C)
> (robot '(a (b c) d) (READ) )
> (LAMBDA (x) (CONS '1 x))
> (LAMBDA (x) (CONS '2 x))
> (LAMBDA (x) (CONS '3 x))
> NIL
→ (3 2 1 A (B C) D)
4) (REDUCE <función> <lista>) Es una forma funcional que recibe una función como
argumento, en lo posible diádica la función, y la aplica el 1ero
con el 2do, el resultado con el 3ero, etc... Reduce la función.
Ej.: (REDUCE '+ '(1 2 3 4) ) → ( + ( + (+ 1 2) 3) 4)
Ej.: (REDUCE 'CONS '(a (b c) ((y))) ) → ((a b c) (y))
Ej.: (REDUCE 'LIST '(a (b c) ((y))) ) → ((a (b c)) ((y)))
Ej.: (DEFUN prod_escalar (v1 v2) producto escalar
(REDUCE '+ (MAPCAR '* v1 v2)) )
Página 8 de 12
LECTURA Y ESCRITURA
1) (PRINT <expresión>) Evalúa su argumento y lo imprime en una nueva línea, seguida de un
espacio en blanco y el valor devuelto por el PRINT es el valor de su argumento.
Ej.: (PRINT '(a b c) ) → (a b c) ;Evaluación de argumento
(a b c) ;valor devuelto por PRINT
Ej.: (PRINT “hoy es martes” ) → “hoy es martes”
“hoy es martes”
Ej.: (+ (PRINT 6) (PRINT 8) ) → 6
8
14
2) (FORMAT t <cadena>) Imprime la <cadena> en la terminal t y devuelve NIL. En lugar de t
puede haber un símbolo que conecte FORMAT con un archivo de salida. La <cadena> puede contener
caracteres de control. Alguno de ellos son los siguientes:
• ~% nueva lı́nea
• ~D si el argumento es un número decimal
• ~A si el argumento es un carácter ASCII
• ~B si el argumento es un número binario
• ~O si el argumento es un número octal
• ~X si el argumento es un número hexadecimal
Ej.: (FORMAT T “~%LINEA 1 ~%LINEA 2”) → LINEA 1
LINEA 2
NIL
Ej.: (FORMAT T “~%EL CUADRADO DE ~D ES ~D” 3 (* 3 3))
→ EL CUADRADO DE 3 ES 9
NIL
Ej.: (SETQ L '(A B C)) → (A B D)
(FORMAT T “~%LA LONGITUD DE LA LISTA ~A ES ~D” L (LENGTH L))
→ LA LONGITUD DE LA LISTA '(A B C) ES 3
NIL
Ej.: (FORMAT T “~%10 EN BINARIO ES ~B Y EN OCTAL ES ~O” 10 10)
→ 10 EN BINARIO ES 1010 Y EN OCTAL ES 12
NIL
Ej.: (LIST (FORMAT T “hola “) (FORMAT T “que tal”) )
→ hola que tal
(NIL NIL)
Ej.: (LIST (PRINT “hola “) (PRINT “que tal”) )
→ "hola "
"que tal"
("hola " "que tal")
Página 9 de 12
La forma de imprimir en columnas tabuladas es insertar un número de ancho de columna dentro de
la directiva A. Ej. 10A le indica a FORMAT que va a alinear la información a izquierda dentro de un
espacio de 10 posiciones.
Ej.: (FORMAT T “~5a*~5a=~10a*.*.*” 3 4 (* 3 4) )
→ 3 *4 =12 *.*.*
NIL
3) (READ) para ingreso de datos por teclado. El valor que devuelve READ es lo ingresado por
teclado
Ej.: (read)
10 ; valor ingresado por teclado
→ 10 ; valor devuelto por el read
Ej.: (+ (read) (read) )
2
3
→ 5
Ej.: (DEFUN sumavec (&OPTIONAL (v1 (APPEND (FORMAT T "ingrese el 1
vector") (READ)))
(v2 (APPEND (FORMAT T "ingrese el 2
vector") (READ))) )
(APPEND (FORMAT T "la suma de los 2 vectores es: ") (MAPCAR '+
v1 v2) )
)
ARCHIVOS
Para grabar en un archivo primero hay que abrir el archivo con OPEN en modo escritura y luego
asociar el stream, que devuelve el OPEN, con un nombre utilizando SETQ.
Luego se usa la función PRINT para grabar los valores en dicho archivo. Al finalizar la grabación de
los datos se debe cerrar el archivo con la función CLOSE.
Ej.: Las siguientes funciones graban en un archivo los números 1, 2 y 3
> (SETQ arch (OPEN “archivo” :direction :output :if-
exists :supersede) )
> (PRINT 1 arch)
> (PRINT 2 arch)
> (PRINT 3 arch)
> (CLOSE arch)
Ej.: En el archivo que sigue se graban: la lista (A B (C D E) F G), la cadena "hola que tal" y
el átomo A y luego se leen los datos grabados en el archivo
> (SETQ arch (OPEN “archivo” :direction :output :if-
exists :supersede))
> (PRINT '(a b (c d e) f g) arch)
Página 10 de 12
> (PRINT "hola que tal" arch)
> (PRINT 'a arch)
> (CLOSE arch)
> (SETQ arch (OPEN “archivo” :direction :input ))
> (READ arch)
→ (A B (C D E) F G)
> (READ arch)
→ "hola que tal"
> (READ arch)
→ A
> (CLOSE arch)
AYUDAS
1) (TRACE fn1 ... fnN) Permite rastrear las funciones fn1,..., fnN mostrando la acción de las
funciones fn1,..., fnN cada vez que actúan.
para desviar la salida por pantalla del TRACE a un archivo se pone:
(SETQ TRACE-OUT (OPEN “test.txt” :direction :output :if-
exists :supersede )
El TRACE es acumulativo. Cada vez que invoco TRACE con funciones, éstas se agregan a las otras
que ya estaban listadas. Para sacar un función puesta en el TRACE se pone:
(UNTRACE fn1 ... fnN)
Si quiero vaciar la lista del trace pongo : (TRACE NIL) o bien (UNTRACE)
2) (STEP <expresión>) evalúa la expresión paso a paso, de forma que se puede controlar el
proceso a voluntad.
> (DEFUN FACTORIAL (N)
(COND ((<= N 1) 1)
(T (* (FACTORIAL (- N 1)) N))))
→ FACTORIAL
> (STEP (FACTORIAL 2))
(FACTORIAL 2)
2
2 = 2
(COND ((<= N 1) 1) (T (* (FACTORIAL #) N)))
(<= N 1)
N
N = 2
1
1 = 1
(<= N 1) = NIL
T
T = T
(* (FACTORIAL (- N 1)) N)
(FACTORIAL (- N 1))
Página 11 de 12
(- N 1)
N
N = 2
(- N 1) = 1
(COND ((<= N 1) 1) (T (* (FACTORIAL #) N)))
(<= N 1)
N
N = 1
1
1 = 1
(<= N 1) = T
1
1 = 1
(COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) = 1
(FACTORIAL (- N 1)) = 1
N
N = 2
(* (FACTORIAL (- N 1)) N) = 2
(COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) = 2
WEBGRAFÍA Y LICENCIA
- Textos tomados, corregidos y modificados de diferentes páginas de Internet, tutoriales y
documentos.
- Este documento se encuentra bajo Licencia Creative Commons 2.5 Argentina (BY-NC-SA),
por la cual se permite su exhibición, distribución, copia y posibilita hacer obras derivadas a
partir de la misma, siempre y cuando se cite la autoría del Prof. Matías E. García y sólo
podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta.
- Autor:
Página 12 de 12
Matías E. García
Matías E. García
.
.
Prof. & Tec. en Inform
Prof. & Tec. en Informá
ática Aplicada
tica Aplicada
www.profmatiasgarcia.com.ar
www.profmatiasgarcia.com.ar
info@profmatiasgarcia.com.ar
info@profmatiasgarcia.com.ar

Más contenido relacionado

La actualidad más candente

álgebra de boole
álgebra de booleálgebra de boole
álgebra de boole
Betzi Lira
 
áLgebra booleana
áLgebra booleanaáLgebra booleana
áLgebra booleana
jesusmora18
 
Algebra de bool
Algebra de boolAlgebra de bool
Algebra de bool
Maricusa Valdivia
 
Teoremas Booleanos
Teoremas BooleanosTeoremas Booleanos
Teoremas Booleanos
Wendy Diaz
 
Funciones excel
Funciones excelFunciones excel
Funciones excel
Eva Rodriguez Del Pino
 
!Prograc6
!Prograc6!Prograc6
!Prograc6
robertoxe
 
Cálculo de una variable Stewart
Cálculo de una variable StewartCálculo de una variable Stewart
Cálculo de una variable Stewart
GianniBeltrami
 
Algebra de boole
Algebra de booleAlgebra de boole
Algebra de boole
gilderaguirreyacha
 
Calculo de predicados e inferencias logicas
Calculo de predicados e inferencias logicasCalculo de predicados e inferencias logicas
Calculo de predicados e inferencias logicas
Ricardo Santaella
 
áLgebra booleana
áLgebra booleanaáLgebra booleana
áLgebra booleana
brayer1
 
Presentación de logica
Presentación de logicaPresentación de logica
Presentación de logica
ajav28
 
Teorema booleanos
Teorema booleanosTeorema booleanos
Teorema booleanos
IVAN SALAZAR
 
Funciones y Progresiones
Funciones y ProgresionesFunciones y Progresiones
Funciones y Progresiones
ark477
 
Funciones y progresiones
Funciones y progresionesFunciones y progresiones
Funciones y progresiones
Jose Miguel Montero Hernandez
 
3.2 buscarv
3.2 buscarv3.2 buscarv
3.2 buscarv
Training_14
 
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
SANTIAGO PABLO ALBERTO
 
Teoremas y postulados del algebra de boole
Teoremas y postulados del algebra de booleTeoremas y postulados del algebra de boole
Teoremas y postulados del algebra de boole
Elizabeth Gomez Madrigal
 
Algebra de boole y simplificacion logica
Algebra de boole y simplificacion logicaAlgebra de boole y simplificacion logica
Algebra de boole y simplificacion logica
Edgar Rivera
 
C ++ cuarto trabajo . -...
C ++ cuarto trabajo . -...C ++ cuarto trabajo . -...
C ++ cuarto trabajo . -...
Victor García
 
Algebra d boole
Algebra d booleAlgebra d boole
Algebra d boole
Dorila Vargas Aguero
 

La actualidad más candente (20)

álgebra de boole
álgebra de booleálgebra de boole
álgebra de boole
 
áLgebra booleana
áLgebra booleanaáLgebra booleana
áLgebra booleana
 
Algebra de bool
Algebra de boolAlgebra de bool
Algebra de bool
 
Teoremas Booleanos
Teoremas BooleanosTeoremas Booleanos
Teoremas Booleanos
 
Funciones excel
Funciones excelFunciones excel
Funciones excel
 
!Prograc6
!Prograc6!Prograc6
!Prograc6
 
Cálculo de una variable Stewart
Cálculo de una variable StewartCálculo de una variable Stewart
Cálculo de una variable Stewart
 
Algebra de boole
Algebra de booleAlgebra de boole
Algebra de boole
 
Calculo de predicados e inferencias logicas
Calculo de predicados e inferencias logicasCalculo de predicados e inferencias logicas
Calculo de predicados e inferencias logicas
 
áLgebra booleana
áLgebra booleanaáLgebra booleana
áLgebra booleana
 
Presentación de logica
Presentación de logicaPresentación de logica
Presentación de logica
 
Teorema booleanos
Teorema booleanosTeorema booleanos
Teorema booleanos
 
Funciones y Progresiones
Funciones y ProgresionesFunciones y Progresiones
Funciones y Progresiones
 
Funciones y progresiones
Funciones y progresionesFunciones y progresiones
Funciones y progresiones
 
3.2 buscarv
3.2 buscarv3.2 buscarv
3.2 buscarv
 
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
Electrónica digital: Tema 2 Representación y tratamiento de los sistemas digi...
 
Teoremas y postulados del algebra de boole
Teoremas y postulados del algebra de booleTeoremas y postulados del algebra de boole
Teoremas y postulados del algebra de boole
 
Algebra de boole y simplificacion logica
Algebra de boole y simplificacion logicaAlgebra de boole y simplificacion logica
Algebra de boole y simplificacion logica
 
C ++ cuarto trabajo . -...
C ++ cuarto trabajo . -...C ++ cuarto trabajo . -...
C ++ cuarto trabajo . -...
 
Algebra d boole
Algebra d booleAlgebra d boole
Algebra d boole
 

Similar a Apunte del Lenguaje LISP

SlE ADSI
SlE ADSISlE ADSI
SlE ADSI
roberto velez
 
Apunte clase
Apunte claseApunte clase
Apunte clase
Simar Leaño Prieto
 
Curso lisp
Curso lispCurso lisp
Curso lisp
Retsel Fanat
 
Ed002
Ed002Ed002
Ed002
mathias
 
Relaciones y-funciones
Relaciones y-funcionesRelaciones y-funciones
Relaciones y-funciones
Roberto Gonzalez
 
ADA 4
ADA  4ADA  4
Producto cartesiano; definición, elementos de una función..pdf
Producto cartesiano; definición, elementos de una función..pdfProducto cartesiano; definición, elementos de una función..pdf
Producto cartesiano; definición, elementos de una función..pdf
Carlos Alberto Colorado Sanchez
 
relaciones y funciones
relaciones y funcionesrelaciones y funciones
relaciones y funciones
pmadridclaretiano
 
Determinantes
DeterminantesDeterminantes
Determinantes
profesorgranados
 
T1 primer tutorial de lisp-grupo6
T1 primer tutorial de lisp-grupo6T1 primer tutorial de lisp-grupo6
T1 primer tutorial de lisp-grupo6
Hiper S.A.
 
ADA 4
ADA 4ADA 4
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Videoconferencias UTPL
 
GUIA DE FUNCIONES.pdf
GUIA DE FUNCIONES.pdfGUIA DE FUNCIONES.pdf
GUIA DE FUNCIONES.pdf
Angeles Sánchez
 
U2 - Determinantes.pdf
U2 - Determinantes.pdfU2 - Determinantes.pdf
U2 - Determinantes.pdf
NicoVelazquez3
 
2015 29-04 matematica
2015 29-04 matematica2015 29-04 matematica
2015 29-04 matematica
Cat Ayora Y Juan Montalvo
 
2015 29-04 matematica
2015 29-04 matematica2015 29-04 matematica
2015 29-04 matematica
Cat Ayora Y Juan Montalvo
 
Manual matlab
Manual matlabManual matlab
Manual matlab
Jhonny Jach
 
Unidad iii relacion-funcion1
Unidad iii  relacion-funcion1Unidad iii  relacion-funcion1
Unidad iii relacion-funcion1
VERÓNICA YÁNEZ
 
Funciones parte i
Funciones parte iFunciones parte i
Funciones parte i
angiegutierrez11
 
3 Operaciones Binarias
3  Operaciones Binarias3  Operaciones Binarias
3 Operaciones Binarias
Alfa Velásquez Espinoza
 

Similar a Apunte del Lenguaje LISP (20)

SlE ADSI
SlE ADSISlE ADSI
SlE ADSI
 
Apunte clase
Apunte claseApunte clase
Apunte clase
 
Curso lisp
Curso lispCurso lisp
Curso lisp
 
Ed002
Ed002Ed002
Ed002
 
Relaciones y-funciones
Relaciones y-funcionesRelaciones y-funciones
Relaciones y-funciones
 
ADA 4
ADA  4ADA  4
ADA 4
 
Producto cartesiano; definición, elementos de una función..pdf
Producto cartesiano; definición, elementos de una función..pdfProducto cartesiano; definición, elementos de una función..pdf
Producto cartesiano; definición, elementos de una función..pdf
 
relaciones y funciones
relaciones y funcionesrelaciones y funciones
relaciones y funciones
 
Determinantes
DeterminantesDeterminantes
Determinantes
 
T1 primer tutorial de lisp-grupo6
T1 primer tutorial de lisp-grupo6T1 primer tutorial de lisp-grupo6
T1 primer tutorial de lisp-grupo6
 
ADA 4
ADA 4ADA 4
ADA 4
 
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
GUIA DE FUNCIONES.pdf
GUIA DE FUNCIONES.pdfGUIA DE FUNCIONES.pdf
GUIA DE FUNCIONES.pdf
 
U2 - Determinantes.pdf
U2 - Determinantes.pdfU2 - Determinantes.pdf
U2 - Determinantes.pdf
 
2015 29-04 matematica
2015 29-04 matematica2015 29-04 matematica
2015 29-04 matematica
 
2015 29-04 matematica
2015 29-04 matematica2015 29-04 matematica
2015 29-04 matematica
 
Manual matlab
Manual matlabManual matlab
Manual matlab
 
Unidad iii relacion-funcion1
Unidad iii  relacion-funcion1Unidad iii  relacion-funcion1
Unidad iii relacion-funcion1
 
Funciones parte i
Funciones parte iFunciones parte i
Funciones parte i
 
3 Operaciones Binarias
3  Operaciones Binarias3  Operaciones Binarias
3 Operaciones Binarias
 

Último

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
dayronfabricioruizmo
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
holabuscafiesta
 
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
JhenryHuisa1
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
micarnavaltupatrimon
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
Maria Celeste Trujillo Cruz
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
KatiuskaDominguez2
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
PaulDelgadoSoto
 

Último (9)

primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptxTARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
TARJETA MADRE DE DAYRON FABRI RUIZ-1.pptx
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
 
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
Mi Carnaval, Aplicación web para la gestión del carnaval y la predicción basa...
 
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
DIAPOSITIVA DE LA MEMORIA RAM.PPXT.-MARIATRUJILLO.
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
 
Introduccion al Lenguaje de Programación C++
Introduccion al Lenguaje de Programación  C++Introduccion al Lenguaje de Programación  C++
Introduccion al Lenguaje de Programación C++
 

Apunte del Lenguaje LISP

  • 1. Lenguaje de Programación LISP LISP (List Processing) es un lenguaje diseñado para la manipulación de fórmulas simbólicas. Más adelante, nació su aplicación a la Inteligencia Artificial. La principal característica de LISP es su habilidad de expresar algoritmos recursivos que manipulen estructuras de datos dinámicos. En LISP existen dos tipos básicos de datos, los átomos y las listas. Todas las estructuras definidas posteriormente son basadas en estos. Átomo: es un elemento indivisible que tiene significado propio. Ej.: A , 54 , 3.14 , + , lunes , sol Los átomos 54 y 3.14 son átomos numéricos y los otros son átomos simbólicos. Lista: consta de un paréntesis izquierdo, seguida por cero o más átomos o listas, y un paréntesis derecho. Cada componente de la lista se denomina elemento. Ej.: (a 23 (8 hola ( ) ) 3.1) lista con 4 elementos La lista nula tiene la característica de ser lista y átomo a la vez , y se representa por: ( ) o bien NIL. Los valores de verdad están representados por el átomo T y el átomo NIL que representan el verdadero y falso respectivamente. LISP también tiene otros tipos de datos como ser caracteres, arreglos, cadenas y estructuras. La notación matemática en LISP es prefija. Ej.: (+ 2 3) para sumar 2 + 3 FUNCIONES PRIMITIVAS - Selectores de elementos de una lista 1) CAR o bien FIRST aplicado a una lista devuelve el primer elemento de la lista Ej.: (CAR '(1 2 3) ) → 1 (FIRST '((a b) 8 (6)) ) → (a b) 2) CDR o bien REST aplicado a una lista devuelve la lista original sin el primer elemento Ej.: (CDR '(1 2 3) ) → (2 3) (REST '((a b) 8 (6)) ) → (8 (6)) Página 1 de 12
  • 2. Como en las matemáticas las funciones pueden agruparse y una función puede ser parámetro de otra función, aplicándose desde la función mas interna hacia afuera. Ej.: (CAR (CDR (CDR '(a b c d) ) ) ) → c Ej.: (CADDR '(a b c d) ) → c 3) NTH aplicado a una lista y un número devuelve el elemento ubicado en la posición indicada por el número Ej.: (NTH 3 '(a b c d) ) → d 4) NTHCDR devuelve el n–ésimo CDR de una lista a partir del numero indicado Ej.: (NTHCDR 1 '(a b c) ) → (b c) - Función QUOTE La función QUOTE evita la evaluación de su argumento devolviéndolo sin evaluar. Ej.: (QUOTE (a b c) ) → (a b c) Se puede usar el apóstrofo como abreviatura para QUOTE . Por lo tanto la expresión que sigue es equivalente a la anterior. Ej.: '(a b c) → (a b c) El hecho de proporcionar el apóstrofo como una abreviatura para QUOTE, se considera una manera de refinamiento sintáctico. - Constructores de listas 1) (CONS <obj> <lista>) devuelve una nueva lista donde el primer elemento es el objeto y los elementos restantes son los de la lista original Ej.: (CONS 'a '(1 2 3) ) → (a 1 2 3) 2) (APPEND <lista> <lista>) devuelve una nueva lista uniendo los elementos de de las listas argumento Ej.: (APPEND '(a b) '(1 2 3) ) → (a b 1 2 3) 3) (LIST <obj1> <obj2> ... <objn>) devuelve una nueva lista cuyos elementos son los argumentos Página 2 de 12
  • 3. Ej.: (LIST 'a 'b '(1 2 3) ) → (a b (1 2 3)) Ejemplo que muestra la diferencia entre las tres: (CONS '(a b) '(1 2 3) ) → ((a b) 1 2 3) (APPEND '(a b) '(1 2 3) ) → (a b 1 2 3) (LIST '(a b) '(1 2 3) ) → ((a b) (1 2 3)) - Reconocedores de objetos 1) ATOM predicado que verifica si su argumento es un átomo Ej.: (ATOM 'a ) → T (ATOM '(a b) ) → NIL 2) SYMBOLP predicado que verifica si su argumento es un átomo no numérico Ej.: (SYMBOLP 'a ) → T (SYMBOLP 5 ) → NIL 3) NUMBERP predicado que verifica si su argumento es un átomo numérico Ej.: (NUMBERP 'a ) → NIL (NUMBERP 5 ) → T 4) LISTP predicado que verifica si su argumento es una lista Ej.: (LISTP 'a ) → NIL (LISTP '(a b) ) → T 5) NULL predicado que verifica si su argumento es la lista nula Ej.: (NULL '() ) → T (NULL '(a b) ) → NIL 6) CONSP predicado que verifica si una lista no es nula Ej.: (CONSP '() ) → NIL (CONSP '(a b) ) → T 7) LENGTH cuenta el número de elementos del nivel superior que hay en la lista Ej.: (LENGTH '() ) → 0 (LENGTH '(a b (X Y)) ) → 3 - Funciones aritméticas : + , - , * , / , expt (potencia) , rem (resto) , sqrt (raíz cuadrada) - Funciones booleanas : AND , OR , NOT Página 3 de 12
  • 4. - Funciones relacionales: eq , < , > , <= , >= EXPRESIONES CONDICIONALES 1) (IF <expr1> <expr2> <expr3>) El valor del condicional IF es el valor de la <expr2> si el valor de <expr1> es T o bien el valor de la <expr3> si el valor de la <expr1> es NIL. Ej.: (IF (> a b) (CAR X) (+ a b) ) 2) (COND (<expr11> <expr12>) (<expr21> <expr22>) ... (<exprn1> <exprn2>) ) El valor del condicional COND será: el valor de la <expr12> si el valor de la <expr11> es T el valor de la <expr22> si el valor de la <expr21> es T y <expr11> es NIL ... el valor de la <exprn2> si el valor de la <exprn1> es T y todas las <exprx1> anteriores son NIL Ej.: (COND ((> a b) (CAR L) ) ((AND (EQ a 5) (< b 3)) (CDR L) ) (T (+ a b) ) ) 3) (CASE <expr> (<cte1> <expr1>) (<cte2> <expr2>) ... [(otherwise <exprN>)] ) El valor de la <expr> siempre debe ser un átomo y las constantes deben ser átomos o listas. El valor del CASE será: el valor de la <expr1> si el valor de la <expr> es igual (eq) a la <cte1> o bien el valor de la <expr> pertenece a la lista <cte1> el valor de la <expr2> si el valor de la <expr> es igual (eq) a la <cte2> o bien el valor de la <expr> pertenece a la lista <cte2> y <expr> no es igual o pertenece a <cte1> ... el valor de la <exprN> si la última constante es otherwise o bien T Ej.: (CASE 3 (1 'a) (2 'b) Página 4 de 12
  • 5. (3 'c) (t 'z) ) → c Ej.: (CASE 'hola ((uno hola dos) 8) ((tres cuatro) 9) ((cinco seis siete) 10) (otherwise 22) ) → 8 Ej.: (DEFUN PP (N) (CASE N (1 'PRIMERO) (2 'SEGUNDO) ((3 4 5) 'POSTERIOR) ) ) > (PP 2) → SEGUNDO > (PP 4) → POSTERIOR OBJETOS FUNCIONALES - Funciones definidas por el programador (DEFUN <nombre> (parámetros) <cuerpo>) Ej.: (DEFUN Sig (N) (+ N 1) ) Ej.: (DE Fact (N) (IF (EQ N 0) 1 (* N (Fact (- N 1))) ) ) Existe la posibilidad de usar parámetros opcionales con valores por defecto (DEFUN <nombre> (<parámetros> &optional (<parám op> <valor>)...(<parám op> <valor>)) <cuerpo> ) Ej.: (DEFUN lista_num (x &optional (z NIL) ) (COND ((NULL x) z) ((NUMBERP (CAR x)) (lista_num (CDR x) (CONS (CAR x) z)) ) (T (lista_num (CDR x) z) ) ) ) > (lista_num '(a b 3 y 8 9 d) ) → (3 8 9) Página 5 de 12
  • 6. Aquí el segundo parámetro es opcional, o sea que la función lista_num se puede invocar con uno o con dos argumentos. Si se la invoca con un solo argumento, el valor del segundo parámetro es el valor establecido en la definición o sea que para este caso sería z = NIL - Funciones de asignación 1) (SET 'simb s) asigna, destruyendo cualquier asignación previa, el valor de la expresión s al símbolo simb. Devuelve el valor de s. Ej.: (SET 'X (+ 1 5) ) → 6 > X → 6 Ej.: (SET (IF (= 1 2) 'A 'B) 3 ) → 3 > A → ERROR > B → 3 2) (SETQ simb1 s1 simb2 s2 ... simbN sN) es como SET, pero se permiten asignaciones múltiples y no se evalúan los símbolos. Devuelve el valor de sN. SETQ viene a ser como SET QUOTE. Ej.: (SETQ X 3 Y (+ X 2) ) → 5 > Y → 5 > X → 3 3) (MAKUNBOUND simb) borra el valor asignado a simb. Ej.: (SETQ A '(x y z) ) → (x y z) > A → (x y z) > (MAKUNBOUND 'A) → A > A → ERROR - Funciones anónimas ((LAMBDA <lista parámetros> <cuerpo>) <valore parámetros>) No reciben un nombre, se evalúan solamente cuando se encuentran en el programa y no quedan registradas como funciones en la tabla de símbolos. Ej.: ((LAMBDA (x) (+ x 1) ) 5 ) → 6 Ej.: ((LAMBDA (x y) (+ x y) ) 2 3 ) → 5 Ej.: ((LAMBDA (n) (LIST n n)) 2) → (2 2) Ej.: ((LAMBDA (X Y) (CONS Y X)) '(B) 'A) → (A B) Página 6 de 12
  • 7. - Formas funcionales Las formas funcionales son funciones que tienen como parámetro otra/s función/es. 1) (EVAL <lista>) Devuelve el resultado de evaluar lo que se encuentre en la lista. Ej.: (EVAL '(+ 2 3) ) → 5 Ej.: (CONS '+ '(2 3) ) → (+ 2 3) (EVAL (CONS '+ '(2 3)) ) → 5 2) (MAPCAR <función> <lista>) Consiste en aplicarle la función a todos los elementos de la lista obteniendo una nueva lista compuesta por los resultados de esta aplicación en cada elemento. Ej.: (MAPCAR 'ATOM '(a 1 (1 2)) ) → (T T NIL) Ej.: (MAPCAR ’+ ’(1 2 3) ’(4 5 6)) → (5 7 9) Ej.: (MAPCAR 'CONS '(a (b) c) '((m p) NIL (f)) ) → ((a m p) ((b)) (c f)) Ej.: (MAPCAR 'CDR '((a b) ((p)) (x (y))) ) → ((b) NIL ((y))) Ej.: (DEFUN sum_vect (v1 v2) Suma de vectores (MAPCAR '+ v1 v2) ) Ej.: (MAPCAR (LAMBDA (x) (* x 2) ) '(4 5 6) ) → (8 10 12) Según el interprete de LISP con que se trabaje esta función se la puede encontrar con el nombre de APPLY-TO-ALL 3) (APPLY <función> <lista>) Si la función que se especifica es monádica, la lista debe contener un solo elemento, y el resultado es el valor que devuelve la función aplicada a ese elemento. Si la función que se especifica es diádica, la lista debe contener solo dos elementos, y el resultado es el valor que devuelve la función aplicada a esos dos elementos, etc... Ej.: (APPLY 'car '((a b)) ) → a Ej.: (APPLY 'cons '(a (1 2)) ) → (a 1 2) Ejemplo del uso de APPLY dentro de una función: Página 7 de 12
  • 8. Vamos a escribir una función que aplicada a una lista dato y una lista que contiene nombres de funciones vaya modificando la lista dato con las funciones de la segunda lista. (Sería como una especie de robot, al cual le damos la materia prima y una lista de ordenes para que aplique sobre la materia prima) (DEFUN robot (objeto ordenes) (IF (NULL ordenes) objeto (robot (APPLY (CAR ordenes) (LIST objeto)) (CDR ordenes) ) ) ) > (robot '(a (b c) d) '(CDR CAR CDR) ) → (c) Otra versión que solicita al usuario ingresar las ordenes: (DEFUN robot (objeto ordenes) (IF (NULL ordenes) objeto (robot (APPLY ordenes (LIST objeto)) (READ)) ) ) > (robot '(a (b c) d) (READ) ) > CDR > CAR > CDR > NIL → (C) > (robot '(a (b c) d) (READ) ) > (LAMBDA (x) (CONS '1 x)) > (LAMBDA (x) (CONS '2 x)) > (LAMBDA (x) (CONS '3 x)) > NIL → (3 2 1 A (B C) D) 4) (REDUCE <función> <lista>) Es una forma funcional que recibe una función como argumento, en lo posible diádica la función, y la aplica el 1ero con el 2do, el resultado con el 3ero, etc... Reduce la función. Ej.: (REDUCE '+ '(1 2 3 4) ) → ( + ( + (+ 1 2) 3) 4) Ej.: (REDUCE 'CONS '(a (b c) ((y))) ) → ((a b c) (y)) Ej.: (REDUCE 'LIST '(a (b c) ((y))) ) → ((a (b c)) ((y))) Ej.: (DEFUN prod_escalar (v1 v2) producto escalar (REDUCE '+ (MAPCAR '* v1 v2)) ) Página 8 de 12
  • 9. LECTURA Y ESCRITURA 1) (PRINT <expresión>) Evalúa su argumento y lo imprime en una nueva línea, seguida de un espacio en blanco y el valor devuelto por el PRINT es el valor de su argumento. Ej.: (PRINT '(a b c) ) → (a b c) ;Evaluación de argumento (a b c) ;valor devuelto por PRINT Ej.: (PRINT “hoy es martes” ) → “hoy es martes” “hoy es martes” Ej.: (+ (PRINT 6) (PRINT 8) ) → 6 8 14 2) (FORMAT t <cadena>) Imprime la <cadena> en la terminal t y devuelve NIL. En lugar de t puede haber un símbolo que conecte FORMAT con un archivo de salida. La <cadena> puede contener caracteres de control. Alguno de ellos son los siguientes: • ~% nueva lı́nea • ~D si el argumento es un número decimal • ~A si el argumento es un carácter ASCII • ~B si el argumento es un número binario • ~O si el argumento es un número octal • ~X si el argumento es un número hexadecimal Ej.: (FORMAT T “~%LINEA 1 ~%LINEA 2”) → LINEA 1 LINEA 2 NIL Ej.: (FORMAT T “~%EL CUADRADO DE ~D ES ~D” 3 (* 3 3)) → EL CUADRADO DE 3 ES 9 NIL Ej.: (SETQ L '(A B C)) → (A B D) (FORMAT T “~%LA LONGITUD DE LA LISTA ~A ES ~D” L (LENGTH L)) → LA LONGITUD DE LA LISTA '(A B C) ES 3 NIL Ej.: (FORMAT T “~%10 EN BINARIO ES ~B Y EN OCTAL ES ~O” 10 10) → 10 EN BINARIO ES 1010 Y EN OCTAL ES 12 NIL Ej.: (LIST (FORMAT T “hola “) (FORMAT T “que tal”) ) → hola que tal (NIL NIL) Ej.: (LIST (PRINT “hola “) (PRINT “que tal”) ) → "hola " "que tal" ("hola " "que tal") Página 9 de 12
  • 10. La forma de imprimir en columnas tabuladas es insertar un número de ancho de columna dentro de la directiva A. Ej. 10A le indica a FORMAT que va a alinear la información a izquierda dentro de un espacio de 10 posiciones. Ej.: (FORMAT T “~5a*~5a=~10a*.*.*” 3 4 (* 3 4) ) → 3 *4 =12 *.*.* NIL 3) (READ) para ingreso de datos por teclado. El valor que devuelve READ es lo ingresado por teclado Ej.: (read) 10 ; valor ingresado por teclado → 10 ; valor devuelto por el read Ej.: (+ (read) (read) ) 2 3 → 5 Ej.: (DEFUN sumavec (&OPTIONAL (v1 (APPEND (FORMAT T "ingrese el 1 vector") (READ))) (v2 (APPEND (FORMAT T "ingrese el 2 vector") (READ))) ) (APPEND (FORMAT T "la suma de los 2 vectores es: ") (MAPCAR '+ v1 v2) ) ) ARCHIVOS Para grabar en un archivo primero hay que abrir el archivo con OPEN en modo escritura y luego asociar el stream, que devuelve el OPEN, con un nombre utilizando SETQ. Luego se usa la función PRINT para grabar los valores en dicho archivo. Al finalizar la grabación de los datos se debe cerrar el archivo con la función CLOSE. Ej.: Las siguientes funciones graban en un archivo los números 1, 2 y 3 > (SETQ arch (OPEN “archivo” :direction :output :if- exists :supersede) ) > (PRINT 1 arch) > (PRINT 2 arch) > (PRINT 3 arch) > (CLOSE arch) Ej.: En el archivo que sigue se graban: la lista (A B (C D E) F G), la cadena "hola que tal" y el átomo A y luego se leen los datos grabados en el archivo > (SETQ arch (OPEN “archivo” :direction :output :if- exists :supersede)) > (PRINT '(a b (c d e) f g) arch) Página 10 de 12
  • 11. > (PRINT "hola que tal" arch) > (PRINT 'a arch) > (CLOSE arch) > (SETQ arch (OPEN “archivo” :direction :input )) > (READ arch) → (A B (C D E) F G) > (READ arch) → "hola que tal" > (READ arch) → A > (CLOSE arch) AYUDAS 1) (TRACE fn1 ... fnN) Permite rastrear las funciones fn1,..., fnN mostrando la acción de las funciones fn1,..., fnN cada vez que actúan. para desviar la salida por pantalla del TRACE a un archivo se pone: (SETQ TRACE-OUT (OPEN “test.txt” :direction :output :if- exists :supersede ) El TRACE es acumulativo. Cada vez que invoco TRACE con funciones, éstas se agregan a las otras que ya estaban listadas. Para sacar un función puesta en el TRACE se pone: (UNTRACE fn1 ... fnN) Si quiero vaciar la lista del trace pongo : (TRACE NIL) o bien (UNTRACE) 2) (STEP <expresión>) evalúa la expresión paso a paso, de forma que se puede controlar el proceso a voluntad. > (DEFUN FACTORIAL (N) (COND ((<= N 1) 1) (T (* (FACTORIAL (- N 1)) N)))) → FACTORIAL > (STEP (FACTORIAL 2)) (FACTORIAL 2) 2 2 = 2 (COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) (<= N 1) N N = 2 1 1 = 1 (<= N 1) = NIL T T = T (* (FACTORIAL (- N 1)) N) (FACTORIAL (- N 1)) Página 11 de 12
  • 12. (- N 1) N N = 2 (- N 1) = 1 (COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) (<= N 1) N N = 1 1 1 = 1 (<= N 1) = T 1 1 = 1 (COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) = 1 (FACTORIAL (- N 1)) = 1 N N = 2 (* (FACTORIAL (- N 1)) N) = 2 (COND ((<= N 1) 1) (T (* (FACTORIAL #) N))) = 2 WEBGRAFÍA Y LICENCIA - Textos tomados, corregidos y modificados de diferentes páginas de Internet, tutoriales y documentos. - Este documento se encuentra bajo Licencia Creative Commons 2.5 Argentina (BY-NC-SA), por la cual se permite su exhibición, distribución, copia y posibilita hacer obras derivadas a partir de la misma, siempre y cuando se cite la autoría del Prof. Matías E. García y sólo podrá distribuir la obra derivada resultante bajo una licencia idéntica a ésta. - Autor: Página 12 de 12 Matías E. García Matías E. García . . Prof. & Tec. en Inform Prof. & Tec. en Informá ática Aplicada tica Aplicada www.profmatiasgarcia.com.ar www.profmatiasgarcia.com.ar info@profmatiasgarcia.com.ar info@profmatiasgarcia.com.ar