El lenguaje LISP. LISP is an easy language to learn (Henry et.al., 1984) Introducción

Tamaño: px
Comenzar la demostración a partir de la página:

Download "El lenguaje LISP. LISP is an easy language to learn (Henry et.al., 1984) Introducción"

Transcripción

1 El lenguaje LISP LISP is an easy language to learn (Henry et.al., 1984) 1 Introducción Origen: 1958 John McCarthy, pionero en IA, empezó a trabajar con la primera implementación de Lisp en 1958.»McCarthy, Recursive functions of symbolic expressions and their computation by machine, Communications of the ACM, Vol 3, No 4,

2 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)» Eficiencia menor que otros lenguajes (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 Expresiones LISP: Datos»Á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

3 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 sus argumentos» Macros: no evalúan todos los argumentos QUOTE 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 no vacía evaluable debe tener como primer elemento un símbolo (+ 3 (+ 2 5)) (quote (a b c)) (setf variable (+ 3 4)) Notación prefijo. El primer elemento de una lista indica qué se desea hacer 5 Operadores de manipulación de listas, I El macro SETF admite como primer argumento:» Un símbolo: (setf dias (lunes martes miercoles))» Una posición de memoria: (setf (second dias) 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 [<var1> <valor1>]... [<varn> <valorn>]) Sirve para: Asignar valores a variables Modificar valores de componentes de listas, variables, etc. 6

4 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<lista>)» (first (a b c)) >> A SECOND, THIRD,..., NTH» (second <lista>) (second (a b c)) >>> B» (nth <expresion> <lista>) (nth 1 (a b c)) >>> B Devuelve el elemento en la posición <expresion> de la <lista> Posición inicial: 0 Si <expresion> excede la dimensión de la lista se devuelve NIL 7 Operadores de manipulación de listas, III REST o CDR» Devuelve la lista sin el primer elemento» (rest <lista>)» (rest (a b c)) >> (B C) NTHCDR» (nthcdr <expresion> <lista>)» (nthcdr (+ 1 1) (a b c)) >> (C) (car (cdr (car ((a b c) d)))) >> B» Es equivalente (cadar ((a b c) d))» C _ R _ = A (first) o D (rest) Cómo crear listas?» cons» append» list 8

5 Operadores de manipulación de listas, IV CONS» Inserta elemento (<expresion>) al inicio de una lista» (cons <expresion> <lista>)» (cons (a b) (c d e)) >>> ((A B) C D E) (cons a (cons b nil)) : construir una lista, concatenando elementos a una lista vacía APPEND» (append <lista>*)» (append (a b) (c d)) >>> (A B C D)» (append '(a b) '(c (d)) '(e f)) >>> (A B C (D) E F)» No destructivo. Crea copia (a primer nivel) de todos los argumentos menos el último» (append a b c) >>>? ERROR LIST» (list <expresion>*)» (list (a b) (c d)) >>> ((A B) (C D))» (list '(a b) '(c (d)) '(e f)) >>> ((A B) (C (D)) (E F))» (list a b c) >>>? (A B C) 9 Operadores de manipulación de listas, V Operadores destructivos:» Suelen ser macros» (setf a (a b)); (setf b (c d)); (setf c (e f)) NCONC (append). Función. (nconc a b) >>> (A B C D) a >> (A B C D) ; b >>> (C D) Modifica la primera lista PUSH (cons). Macro (push r b) >>> (R C D) b >>> (R C D) Introduce elemento. Modifica la lista POP. Macro (pop c) >>> E c >>> (F) Saca elemento. Modifica la lista 10

6 Operadores de manipulación de listas, VI Otras funciones: LAST (last <lista>) (last (a b c)) >>> (C) (last ((A B) (C D))) >>> ((C D)) Devuelve el último elemento REVERSE (del primer nivel de anidamiento) (reverse <lista>) (reverse (a b c)) >>> (C B A) (reverse '((A B) (C D))) >>> ((C D) (A B)) Da la vuelta al primer nivel de la lista LENGTH (lenght <lista>) (lenght (a b c)) >>> 3 Longitud de la lista, del primer nivel SUBST (subst <nuevo> <viejo> <lista>) (subst a b (a b c)) >>> (A A C) Sustituir con <nuevo> todas las apariciones de <viejo> en <lista> 11 Otras funciones LISP, I PROGN, PROG1» Permiten escribir instrucciones compuestas (como { y } en el lenguaje C)» Evalúan todas las sentencias que contienen y devuelven la última o primera sentencia.» (progn (+ 3 4) (+ 4 5)) >>> 9» (prog1 (+ 3 4) (+ 4 5)) >>> 7 (progn [<sentencia1>] [<sentencian>]) (prog1 <sentencia1> [<sentencia2>] [<sentencian>]) progn puede no recibir ningun argumento, entoces devuelve NIL prog1 tiene que recibir al menos una sentencia 12

7 Otras funciones LISP, II PRINT» (PRINT <forma>)» Mostrar información al usuario.» Si el valor de <forma> lo llamamos A, el valor es A. Adicionalmente al ejecutarse, también se imprime A» > (progn (setf x (print A)) (+ 3 4)) A >>> 7» > x >>> A READ» (SETF variable (READ))» Leer información del usuario CL-USER(1): (setf variable (read)) HOLA! (lo introduce usuario y pulsa intro) HOLA! CL-USER(2): variable HOLA! CL-USER(3): 13 Otras funciones LISP, III EVAL (en desuso)» Evalúa dos veces una expresión» (eval (+ 3 4)) >> 7»(setfa 'b)»(setfb c)» a >> b» b >> c» (eval a) >> c Operadores matemáticos» +, -, *, /, ABS» EXPT (expt 2 4) >>> 16» MAX, MIN (max ) >>> 5»FLOAT (float 1/2) >>> 0.5» ROUND (round 3.2) >> 3 14

8 Condicionales, I El valor lógico de una forma LISP se considera falso si su valor LISP es NIL. En caso contrario, el valor lógico es verdadero. Condicionales: * if * when IF (macro) * unless *cond» Sintaxis: (if <expresion> <forma1> [forma2]) Si el valor lógico de <expresión> es verdadero, devuelve el valor de <forma1>. Si es falso, devuelve el valor de <forma2>.» (if (> 5 (+ 2 2)) (+ 3 3) (+ 3 4)) >>> 6 Si se desea que se evalúen varias formas cuando sea cierta o falsa la condición, qué hacemos? Usamos progn o prog1 15 Condicionales, II WHEN (macro)» Sintaxis: (when <expresion> <forma-1> <forma-2>...<forma-n>) Si el valor lógico de <expresión> es verdadero, ejecuta las formas <forma-1>, <forma-2>,... <forma-n> y devuelve como valor final el valor de <forma-n>. Si es falso, devuelve NIL.» (when (> 5 (+ 2 2)) (+ 3 3) (+ 3 4)) >>> 7 Se ejecuta todo, no hace falta poner progn o prog1 No hay parte else! (when <exp> <forma>+) (if <exp> (progn <forma>+)) 16

9 Condicionales, III UNLESS (macro)» Sintaxis: (unless <expresion> <forma-1> <forma-2>...<forma-n>) Si el valor lógico de <expresión> es falso, ejecuta las formas <forma-1>, <forma-2>,... <forma-n> y devuelve como valor final el valor de <forma-n>. Si es verdadero, devuelve NIL.» (unless (> 5 (+ 2 2)) (+ 3 3) (+ 3 4)) >>> NIL unless es el contrario a when Cuando se devuelve NIL, no se ha ejecutado nada en este caso 17 Condicionales, IV COND (macro)» Sintaxis: (cond (<condición-1> <forma-11> <forma-12>...<forma-1-a1>) (<condición-2> <forma-21> <forma-22>...<forma-2-a2>)... (<condición-n> <forma-n1> <forma-n2>...<forma-n-an>)) Cuando encuentra una <condicion-i> cuyo valor lógico de es verdadero, ejecuta las formas <forma-i1>, <forma-i2>,... <forma-i-ai> y devuelve como valor final el valor de <forma-i-ai>.» (cond ((> 5 7) (+ 3 4) (+ 4 5)) ((> 5 3) (+ 5 6) (+ 6 7)) (t (+ 7 8) (+ 8 9))) >>> 13 18

10 Predicados Procedimientos que devuelven T o NIL Usual calcular el valor lógico de expresiones LISP construidos con ellos. Tipos de datos:» (<predicado> <expresion>)» ATOM, STRINGP, NUMBERP, SYMBOLP, LISTP Para saber de qué tipo es un dato» (atom a) >>> T ; (atom NIL) >>> T» (listp a) >>> NIL ; (listp NIL) >>> T Numéricos: Hoja 1, ejercicio 3» Los operandos deben ser números» >, <, <=, >=, ZEROP, PLUSP, MINUSP, EVENP, ODDP Identificador listas vacías:» NULL Hoja 1, ejercicio 5 Es la lista vacía?. Es su valor lógico falso? (null (rest (a))) >>> T 19 Predicados de igualdad, I EQ, EQL, EQUAL, = =» (= <numero> <numero>)» (= 3 (+ 2 1)) >>> T; (= 3 3.0) >>> T Determina si dos variables ocupan la misma EQ posición de memoria» Comprueba igualdad a nivel de punteros» Ejemplos: (setf x (a b 2)) ; (setf y (a b 2)); (setf z x) (eq x y) >>> NIL ; (eq (first x) (first y)) >>> T (eq z x) >>> T EQL Comprueba igualdad de átomos» (eql <exp1> <exp2>) Es T cuando: i. Cuando <exp1> y <exp2> son átomos y ii. (eq <exp1> <exp2>) se evalúa a T» Ejemplos: 1) (eql (cons a nil) (cons a nil)) >>> NIL (falla i) 2) (setf x (cons a nil)) >>> (A) (eql x x) >>> T 20

11 Predicados de igualdad, II EQUAL» Comprueba a nivel simbólico si dos expresiones son iguales (al imprimirlas)» (equal x y) >>> T» (equal (first x) (first y)) >>> T» (equal z x) >>> T» (equal 3 3.0) >>> NIL 21 Operadores lógicos, I AND (macro)» (and <exp1> <exp2>... <expn>)» Si el valor lógico de todas las <expi> es verdadero, devuelve el valor de la última (<expn>). En caso contrario, devuelve NIL.» Cuando encuentra alguna <expi> con valor lógico falso, ya no sigue evaluando el resto de las <exp>.» (and (evenp 2) (plusp -3) (print 3)) >>> NIL OR (macro)» (or <exp1> <exp2>... <expn>)» Si el valor lógico de alguna de las <expi> es verdadero, devuelve su valor. En caso contrario, devuelve NIL.» Cuando encuentra alguna <expi> con valor lógico verdadero, ya no sigue evaluando el resto de las <exp>.» (or (evenp 2) (plusp -3) (print 3)) >>> T 22

12 Operadores lógicos, II NOT» (not <exp>)» Si el valor lógico de <exp1> es verdadero, devuelve NIL. En caso contrario devuelve T.» (not (oddp 2)) >>> T» (not (list 2 3)) >>> NIL» (not (oddp 3) >>> NIL Hoja 1, ejercicio 6 23 Variables locales y globales, I (setf dias (lunes martes miercoles))» Es una variable global (puede ser llamada por el resto de instrucciones) Las variables globales en LISP se suelen denominar con * :» *dias-de-la-semana* 24

13 Variables locales y globales, II Variables locales» LET (macro) Ejemplo: >(prog1 (let ((x a) (y b) z) (setfz(listx y)) (list z z)) (list 'final 'evaluacion)) >>> ((A B) (A B)) Sintaxis: (let ((<var-1> <valor-inicial-1>) (<var-2> <valor-inicial-2>)... (<var-n> <valor-inicial-n>)) <forma-1> <forma-2>... <forma-m>) LET: asignación de valores en paralelo LET*: asignación de valores de forma secuencial Se puede: (let* ( (x a) (z x)) 25 Definición de funciones, I Ejemplo: >(defun factorial (numero) (cond ((= numero 0) 1) (t (* numero (factorial (- numero 1)))))) >>> FACTORIAL > (factorial 3) >>> 6 Sintaxis: Si la sintaxis está bien, LISP devuelve el nombre de la función. (defun <nombre-funcion> (<lista-argumentos>) [(let/let* ] para definir variables locales <forma-1> <forma-2>... <forma-n>) Comentarios: El valor de la función es el de la última forma (<forma-n>). No se puede utilizar return para devolver el valor de retorno (como en el lenguaje C). Los argumentos son también variables locales. Valor de un símbolo como variable y como función (una variable y una función pueden tener el mismo nombre). 26

14 Definición de funciones, II Argumentos» Número fijo de argumentos: (defun f (x y) (list x y)) (f a b c) >>> error» Número variable de argumentos (&rest): Función LIST (ejemplo de función que tiene &rest en su implementación) (defunf (x y &restz) (listx y z)) (f a b c d) >>> (A B (C D)) (f a b) >>>? (A B NIL) z tiene NIL» Argumentos opcionales con nombre y valor por defecto (&key): (defun f (x y &key (z a) u (v b)) (list x y z u v)) (f a b) >>> (A B A NIL B) (f a b :z c :v d) >>> (A B C NIL D) &key (<arg1>[<valor1>]) [(<argn>[<valorn>])] 27 Definición de funciones, III Un mismo símbolo se puede utilizar para definir una variable y una función.» (setf f a)» (defun f (x y) (list x y)) LISP permite referirse a las funciones o bien por su nombre o bien por la expresión que las define (caso lambda) LISP manipula las funciones como un tipo más de datos.» Las funciones pueden recibir funciones como argumento» Las funciones pueden devolver como valor de retorno funciones. Hoja 1, ejercicio 7, 8,

15 Definición de funciones, IV Operadores de iteración»dotimes (dotimes (i 3 (list 'final)) (list i i)) >>> (FINAL) Sintaxis: (dotimes (<var> <num-iter> [<valor-retorno]) <forma-1>... <forma-n>)»dolist (dolist (i (list a b) (list 'final)) (list i i)) >> (FINAL) Sintaxis: (dolist (<var> <lista> [<valor-retorno]) <forma-1>... <forma-n>)»while Sintaxis: (while <condicion> <forma-1>... <forma-n>)» LOOP Sintaxis (la más sencilla): (loop <forma-1>... <forma-n>)» En todos: (return <expresion>), abandona la iteración devolviendo <expresion>. 29 Definición de funciones, V Ejercicios de iteración >> (dotimes (i 3 (list 'final)) (print i)) (FINAL)» Cómo sería con while?: (progn (let ((i 0)) (while (< i 3) (print i) (setf i (+ i 1))) (list 'final)))» Cómo sería con loop? (progn (let ((i 0)) (loop (print i) (setf i (+ i 1)) (if (= i 3) (return))) (list 'final) )) 30

16 Definición de funciones, VI Funciones lambda (anónimas o sin nombre)» Un subprograma de carácter tan auxiliar que no es necesario darle nombre: lambda. (lambda ( <lista-argumentos> ) <forma-1> <forma-2>... <forma-n>)» Todos los componentes mismo significado que en defun. Contar los elementos de una lista (count-if que cumplan #'(lambda (x) (eql (first x) 'pantalon) ) '( (medias 20) (falda 10) (pantalon 40) (medias 1) Valores entre los que contar (pantalon 2) (total 73 )) ) >>> 2 31 Operadores sobre funciones, I FUNCALL» (funcall <funcion> <arg1>... <argn>)» Son equivalentes: (f a b) >>> (A B) (funcall # f a b) Con funcall necesario # function <expresion> # <expresion>» (progn (setf funcíon-f # f) (funcall funcíon-f a b))» (funcall # (lambda (x y) (list x y)) a b) APPLY» (apply <funcion> (<arg1>... <argn>))» Son equivalentes: (f a b) >>> (A B) (apply # f (a b)) Diferencia entre funcall y apply? La forma de cómo se presentan los datos sobre los que se aplica la función, con apply los datos van dentro de ( y ) 32

17 Operadores sobre funciones, II MAPCAR» (mapcar <funcion> <lista1>... <listan>)» Aplicación de funciones a elementos de listas > (mapcar # (lambda (x y) (list x x y y)) (a b c) (d e f)) >>> ((A A D D) (B B E E) (C C F F)) Qué ocurre si las listas son de distintos tamaños? REMOVE» (remove <elemento> <lista> [:test <funcion-igualdad>])» Obtener lista a partir de otra, borrando los elementos que cumplan una condición» (remove b (a b c)) >>> (A C) Equivale a (remove b (a b c) :test # eql)» (remove (a b) (a (a b) c)) >>> (A (A B) C) (remove (a b) (a (a b) c) :test # equal) >>> (A C) Hoja 1, ejercicio 9 Hace lo común Necesario :test para borrar cuando hay sublistas 33 Operadores sobre funciones, III DELETE» Versión destructiva de REMOVE» (setf lista (a b c))» (remove b lista) >>> (A C)» lista >>> (A B C)» (delete b lista) >>> (A C)» lista >>> (A C) MEMBER QUÉ OCURRE: (setf l '(a (a b) c) ) (delete '(a b) l) (delete '(a b) l :test #'equal)» Sintaxis: (member <elemento> <lista> [:test <funcion-gualdad>])» (member b (a b c)) >>> (B C) Equivale a (member b (a b c) :test # eql)» (member (a b) (a (a b) c)) >>> NIL >(member (a b) (a (a b) c) :test # equal) >>> ((A B) C) 34

18 Operadores sobre funciones, IV Otros operadores cuyos argumentos son funciones:» COUNT-IF, FIND-IF, REMOVE-IF, REMOVE-IF-NOT, DELETE-IF, DELETE-IF-NOT Observación:» Al utilizar # <f>, si <f> es un macro se tienen resultados inesperados. No usarlos, por tanto. 35 Funciones sobre strings Más corriente el uso de símbolos Funciones:» LENGTH, REVERSE» STRING= (sensible a mayúsculas), STRING-EQUAL» (read-from-string <string>) >>> <simbolo>» (string <simbolo>) >>> <string> Devuelve el string y su nº de caracteres hasta el primer blanco Convierte simbolo a string» (prin1-to-string <numero>) >>> <string>» (search <string1> <string2>) Convierte número a string Busca parte de un string» (subseq <string> <posicion>) >>> substring a partir de <posicion>» (concatenate <string>+) 36

19 Arrays Colección n dimensional de elementos. Se puede recorrer con un índice. Acceso no secuencial a elementos» En listas, el acceso a los elementos es secuencial» Más eficiente el acceso a elementos en arrays que en listas Operadores: MAKE-ARRAY, AREF» > (setf mi-array (make-array '(2 3))) >>> #2A((NIL NIL NIL) (NIL NIL NIL))» > (setf (aref mi-array 0 1) 'a) >>> A» > mi-array >>> #2A((NIL A NIL) (NIL NIL NIL)) Crear array: (make-array <lista-dimensiones>) Acceso a los elementos: (aref <array> <indice1> <indicen>) 37 Estructuras, I Se asocia un nombre a un conjunto de propiedades o componentes (de distintos tipos) a los que se les puede asignar valores. Ejemplo: > (defstruct nombre-persona nombre (alias 'sin-alias) apellido) (defstruct <nombre-estructura> <nombre-componentei> (<nombre-componentej> <valorj>) ) >>> NOMBRE-PERSONA make-nombreestructura : > (setf persona1 Crear instancia y dar valores a las partes (make-nombre-persona :nombre 'juan)) >>> #S(NOMBRE-PERSONA NOMBRE JUAN ALIAS SIN-ALIAS APELLIDO NIL) > (setf persona2 (make-nombre-persona :nombre 'pedro :alias 'perico)) >>> #S(NOMBRE-PERSONA NOMBRE PEDRO ALIAS PERICO APELLIDO NIL) 38

20 Estructuras, II nombreestructura-campoestructura : Acceder a un campo de la estructura > (setf (nombre-persona-alias persona1) 'juanito) >>> JUANITO > persona1 #S(NOMBRE-PERSONA NOMBRE JUAN ALIAS JUANITO APELLIDO NIL) Funciones definidas automáticamente por LISP:» MAKE-NOMBRE-PERSONA» NOMBRE-PERSONA -NOMBRE, NOMBRE- PERSONA -ALIAS, NOMBRE-PERSONA - APELLIDO make-nombreestructura : Crear instancia y dar valores a las partes (setf <instancia> (<make-nombreestructura> <nomcomponentei><valori> )) nombreestructura-campoestructura : Acceder a un campo de la estructura 39 (setf (<nombreestructuracompontei><instancia>)<valori>) Alternativa a estructuras Las listas son una alternativa al uso de estructuras: > (setf persona1 '((:NOMBRE JUAN) (:ALIAS JUANITO) (:APELLIDO NIL))) >>> ((:NOMBRE JUAN) (:ALIAS JUANITO) (:APELLIDO NIL)) > (assoc :alias persona1) >>> (:ALIAS JUANITO) > (first (member :alias persona1 :test #'(lambda (x y) (eql x (first y))))) >>> (:ALIAS JUANITO) ASSOC utiliza por defecto EQL 40

21 DEBUGGING TRACE» Función recursiva: (defun factorial (n) (if (= n 0) 1 (* n (factorial (- n 1)))))» (trace factorial) > (factorial 2) FACTORIAL [call 5 depth 1] with arg: 2 FACTORIAL [call 6 depth 2] with arg: 1 FACTORIAL [call 7 depth 3] with arg: 0 FACTORIAL [call 7 depth 3] returns value: 1 FACTORIAL [call 6 depth 2] returns value: 1 FACTORIAL [call 5 depth 1] returns value: 2 UNTRACE» (untrace), (untrace factorial) Uso de PRINT, DESCRIBE, etc» (describe factorial) No es posible uso de breakpoints, steps, etc 41 Otros temas en LISP, I Comentarios» Después de ; y hasta final de línea Macros» Permiten definir operadores que no evalúan sus argumentos: COND, SETF, DEFUN son macros (defmacro defun (nombre-funcion lista-argumentos &rest formas)...) Hoja 1, ejercicio 14, 15» Uso de backquote (`) y de arroba (@) Operadores adicionales al quote ( ) Muchas funciones ya implementadas en LISP:» SORT, LOOP generalizado, etc CLOS (programación orientada a objetos) Hoja 2, ejercicios 1,2, 3, 8, 11, 12 42

22 Otros temas en LISP, II Dotted-pairs (en desuso) > (cons 'a 'b) >>> (A. B) Edición, carga compilación:» COMPILE-FILE, LOAD-FILE Entrada-salida:» PRINT, READ, FORMAT, READ-LINE, READ-CHAR Otros operadores de iteración:» DO, DO* (su diferencia es equivalente a la de LET y LET*) (declare (special <variable>)) Argumentos opcionales (&optional) Property-names de símbolos Copias de listas: COPY-TREE Funciones sobre conjuntos: UNION, INTERSECTION, etc. Paquetes 43

El lenguaje LISP. LISP is an easy language to learn

El lenguaje LISP. LISP is an easy language to learn El lenguaje LISP LISP is an easy language to learn (Henry et.al., 1984) 1 Origen: 1958 Introducción John McCarthy, pionero en IA, empezó a trabajar con la primera implementación de Lisp en 1958.» McCarthy,

Más detalles

Resumen de LISP. Javier Gil Julio, 2011

Resumen de LISP. Javier Gil Julio, 2011 Resumen de LISP Javier Gil Julio, 2011 ; conceptos fundamentales de Lisp ; sintaxis basica (+ 2 3) (* 2 (+ 4 6)) (+ 2/7 7/67) (/ #c(2 3) 6/4) ; operadores matematicos basicos (+ 2 3) (- 8 6) (* 2/7 6/5)

Más detalles

Tema 1: Introducción a Lisp

Tema 1: Introducción a Lisp Inteligencia Artificial I Curso 202 203 Tema : Introducción a Lisp José L. Ruiz Reina Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla IA-I 202 203 CcIa Introducción

Más detalles

Metodologías de Programación II Listas en Lisp

Metodologías de Programación II Listas en Lisp Metodologías de Programación II Listas en Lisp Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

Programación Funcional en LISP Lógica para Ciencias de la Computación

Programación Funcional en LISP Lógica para Ciencias de la Computación Programación Funcional en LISP Lógica para Ciencias de la Computación Primer Cuatrimestre de 2009 Material Adicional Introducción A lo largo de la carrera estudiaremos diversos paradigmas de programación:

Más detalles

Curso de programación en Lisp

Curso de programación en Lisp Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Curso de programación en Lisp José A. Alonso Jiménez (jalonso@us.es) Sevilla, 1991 Contenido 1 El cálculo aritmético 1 1.1 Los

Más detalles

Curso de Lisp con Golden Common Lisp

Curso de Lisp con Golden Common Lisp Curso de Lisp con Golden Common Lisp Dpto. de José A. Alonso Álgebra, Computación, Geometría y Topología Universidad de Sevilla Sevilla, 1990 Contenido 1 El cálculo aritmético 1 1.1 Los números y sus operaciones..................

Más detalles

Manual de Lisp para IACS (Curso 91 92)

Manual de Lisp para IACS (Curso 91 92) Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Manual de Lisp para IACS (Curso 91 92) Sevilla, 1992 Contenido 1 Introducción 1 1.1 Introducción............................

Más detalles

GUÍA BÁSICA DE SCHEME v.4

GUÍA BÁSICA DE SCHEME v.4 Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los

Más detalles

Introducción al Lenguaje Common Lisp

Introducción al Lenguaje Common Lisp UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Introducción al Lenguaje Common Lisp JESÚS GONZÁLEZ BOTICARIO DEPARTAMENTO DE INTELIGENCIA ARTIFICIAL Dpto. de Inteligencia Artificial UNIVERSIDAD NACIONAL

Más detalles

Dpto. de. Álgebra, Computación, Geometría y Topología Universidad de Sevilla. Manual de Lisp. José A. Alonso Jiménez

Dpto. de. Álgebra, Computación, Geometría y Topología Universidad de Sevilla. Manual de Lisp. José A. Alonso Jiménez Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Manual de Lisp José A. Alonso Jiménez (jalonso@us.es) Sevilla, 1991 Contenido 1 Introducción 1 1.1 Introducción............................

Más detalles

Implementación de algoritmos y cálculo simbólico

Implementación de algoritmos y cálculo simbólico Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Implementación de algoritmos y cálculo simbólico (Curso 90 91) José A. Alonso Jiménez Sevilla, 1990 Contenido 1 Cálculo aritmético

Más detalles

LISP I. Programación recursiva frente a iterativa. Características de la programación recursiva:

LISP I. Programación recursiva frente a iterativa. Características de la programación recursiva: LISP I 1 Programación recursiva frente a iterativa Características de la programación recursiva:» Implementación intuitiva y elegante. La traducción de la solución recursiva de un problema (caso base y

Más detalles

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones

Más detalles

Tema 3: Técnicas básicas de

Tema 3: Técnicas básicas de Inteligencia Artificial Curso 999 2000 Tema 3: Técnicas básicas de búsqueda José A. Alonso Jiménez Francisco J. Martín Mateos Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de

Más detalles

Lenguajes de Programación Programación funcional

Lenguajes de Programación Programación funcional Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una

Más detalles

PROGRAMACIÓN DECLARATIVA

PROGRAMACIÓN DECLARATIVA UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA CUARTO CURSO PRIMER CUATRIMESTRE Tema 5.-

Más detalles

CLIPS Definición de funciones

CLIPS Definición de funciones CLIPS Definición de funciones Por función consideramos tanto las funciones predefinidas en CLIPS como las definidas por el usuario en este lenguaje, o las definidas en un lenguaje externo (C, FORTRAN o

Más detalles

1. INTRODUCCIÓN AL COMMON LISP Introducción al Common Lisp. La primera sesión de prácticas consiste en una introducción al Common Lisp, empezando por lo más básico: el concepto de CONS. Asimismo se realiza

Más detalles

Anexo 3: Implementaciones en Lisp

Anexo 3: Implementaciones en Lisp Anexo 3: Implementaciones en Lisp José A. Alonso Jiménez Carmen Graciani Díaz Francisco Jesús Martín Mateos José Luis Ruiz Reina Dpto. Ciencias de la Computación e Inteligencia Artificial UNIVERSIDAD DE

Más detalles

3 LISTAS EN LISP. Figura 1: Una lista de un elemento, como cons a nil. nil. 1 CL-USER> (cons a nil) 2 (A) 3 CL-USER> (car (a)) 4 A

3 LISTAS EN LISP. Figura 1: Una lista de un elemento, como cons a nil. nil. 1 CL-USER> (cons a nil) 2 (A) 3 CL-USER> (car (a)) 4 A 3 LISTAS EN LISP Las listas fueron originalmente la principal estructura de datos en Lisp De hecho, el nombre del lenguaje es un acrónimo de LISt Processing Las implementaciones modernas de Lisp incluyen

Más detalles

Tema 5.- Tipos de datos compuestos

Tema 5.- Tipos de datos compuestos UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMAC CIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO

Más detalles

Tema 3: Características de la programación funcional

Tema 3: Características de la programación funcional Tema 3: Características de la programación funcional Sesión 5: El paradigma funcional (1) martes 22 de febrero de 2011 Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z-

Más detalles

4.7 Operaciones sobre Objetos en Scheme

4.7 Operaciones sobre Objetos en Scheme 4.7 Operaciones sobre Objetos en Scheme Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores Ejemplos de Equivalencia (eq? a a) ;=> #t (eq? 3.1 3.1) ;=> () (eq? (cons a

Más detalles

Programación Funcional Lisp-Scheme

Programación Funcional Lisp-Scheme Programación Funcional Lisp-Scheme Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Dónde bajar? Lisp (EdScheme): www.schemers.com com Ejemplo: => (+ (* 3(+ (* 24) (+ 35))) (+

Más detalles

Tema 3: Características de la programación funcional. Sesión 6: El paradigma funcional (2)

Tema 3: Características de la programación funcional. Sesión 6: El paradigma funcional (2) Tema 3: Características de la programación funcional Sesión 6: El paradigma funcional (2) Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z- H-10.html#%_sec_1.1.5][The

Más detalles

Programación Declarativa

Programación Declarativa Programación Declarativa Tema 2: LISP (SCHEME) 2 Tema 2: LISP (SCHEME) Introducción Representación de Datos Definición de Funciones Predicados Listas 3 Introducción (I) SCHEME es un dialecto de LISP (LISt

Más detalles

4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores

4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores 4.7 Operaciones sobre Objetos en Scheme Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores a) Equivalencias (eq? obj 1 obj 2 ) retorno: #t si son idénticos (eqv? obj 1

Más detalles

TP 3: intérprete de C en LISP (alias máquina virtual de C en LISP )

TP 3: intérprete de C en LISP (alias máquina virtual de C en LISP ) TP 3: intérprete de C en LISP (alias máquina virtual de C en LISP Introducción Se deberá programar un intérprete de C en LISP. El código que ingresará al intérprete tendrá ciertas restricciones: Se utilizará

Más detalles

Tema 3.- Predicados y sentencias condicionales

Tema 3.- Predicados y sentencias condicionales UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER

Más detalles

Metodologías de Programación II Macros en Lisp

Metodologías de Programación II Macros en Lisp Metodologías de Programación II Macros en Lisp Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

Tema 4: Programación funcional avanzada en Scheme

Tema 4: Programación funcional avanzada en Scheme Tema 4: Programación funcional avanzada en Scheme Índice 1 Let... 2 2 Let*... 5 3 Letrec... 5 4 Quote...6 5 Eval... 7 6 Datos compuestos: parejas...8 7 Los datos compuestos pueden ser funciones...11 8

Más detalles

Tema 6: Estructuras de datos recursivas

Tema 6: Estructuras de datos recursivas Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura

Más detalles

PRACTICA 1. PROGRAMACIÓN EN LISP Fecha de publicación: 29 de septiembre de Duración: 3 sesiones de laboratorio. Versión: 2011/09/29

PRACTICA 1. PROGRAMACIÓN EN LISP Fecha de publicación: 29 de septiembre de Duración: 3 sesiones de laboratorio. Versión: 2011/09/29 PRACTICA 1. PROGRAMACIÓN EN LISP Fecha de publicación: 29 de septiembre de 2011. Duración: 3 sesiones de laboratorio. Versión: 2011/09/29 Forma de entrega: Según lo dispuesto en las normas de entrega generales,

Más detalles

Tema 5: Macros. Sesión 14: Macros

Tema 5: Macros. Sesión 14: Macros Tema 5: Macros Sesión 14: Macros Hoy veremos... Conceptos generales Quasiquotation Macros en Scheme Ejemplos de macros Referencias Capítulo 3.7 Programming Language Pragmatics: Macro Expansion Definición

Más detalles

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Programación Funcional Lisp-DrScheme Primera Parte Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Programación Funcional! La programación funcional es un paradigma de programación

Más detalles

LISP. El manejo de símbolos. Ejemplos de expresiones simbólicas. Motivación

LISP. El manejo de símbolos. Ejemplos de expresiones simbólicas. Motivación El manejo de símbolos LISP García Osorio Área de Lenguajes y Sistemas Informáticos Universidad de Burgos Febrero, 1999! En todo programa de Inteligencia Artificial la manipulación de símbolos es una parte

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;) Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,

Más detalles

Tema 2: Introducción a Scheme. Sesión 4: Introducción a Scheme (2)

Tema 2: Introducción a Scheme. Sesión 4: Introducción a Scheme (2) Tema 2: Introducción a Scheme Sesión 4: Introducción a Scheme (2) Referencias DrRacket (http://racket-lang.org/) A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/ tour/) Structure

Más detalles

Práctica 2 de IA /2012. LÓGICA Fecha publicación: 26 de octubre de 2011 Duración: 3 sesiones de laboratorio Versión: 2011/10/26

Práctica 2 de IA /2012. LÓGICA Fecha publicación: 26 de octubre de 2011 Duración: 3 sesiones de laboratorio Versión: 2011/10/26 Práctica 2 de IA - 2011/2012. LÓGICA Fecha publicación: 26 de octubre de 2011 Duración: 3 sesiones de laboratorio Versión: 2011/10/26 Forward y backward chaining en lógica proposicional En la práctica

Más detalles

LECCIÓN 8. BÚSQUEDAS CON ÁRBOL

LECCIÓN 8. BÚSQUEDAS CON ÁRBOL LECCIÓN 8. BÚSQUEDAS CON ÁRBOL En esta lección se presenta una implementación de algoritmos generales de búsqueda en grafos que emplean árboles de búsqueda. También se analiza la resolución de dos problemas

Más detalles

Capítulo 4. Control de flujo. Continuar

Capítulo 4. Control de flujo. Continuar Capítulo 4 Control de flujo Continuar Introducción El control de flujo permite encausar a la computadora sobre la ruta que debe seguir al momento de la ejecución de un programa, para ello se apoya en las

Más detalles

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Aplicación de la Inducción Matemática Programación Funcional Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Motivación Programación Imperativa Declarativa Procedimental Ejemplo:

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance

Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance Inducción, Recursión y alcance Especificación inductiva de tipos de datos Tipo de datos: Conjunto de valores Conjunto de operaciones sobre dichos valores ejemplo: Sea S el conjunto más pequeño tal que:

Más detalles

Introducción a OCaml. October 19, 2015

Introducción a OCaml. October 19, 2015 Introducción a OCaml October 19, 2015 OCaml: introducción Es un dialecto de ML. Lenguaje de programación funcional. Fuertemente tipado. Con inferencia de tipos. Polimórfico. [Página oficial: http://www.ocaml.org/

Más detalles

Introducción al Lenguaje de Programación Ada

Introducción al Lenguaje de Programación Ada Instrumentación de Tiempo Real Introducción al Lenguaje de Programación Ada Mario Aldea Rivas Departamento de Electrónica y Computadores Universidad de Cantabria GRUPO DE COMPUTADORES Y TIEMPO REAL Mario

Más detalles

Inteligencia Artificial I 3ra. Práctica: Algoritmos de Búsqueda

Inteligencia Artificial I 3ra. Práctica: Algoritmos de Búsqueda Inteligencia Artificial I 3ra. Práctica: Algoritmos de Búsqueda 1 Descripción general de la práctica El objetivo de esta práctica es estudiar el comportamiento de diferentes algoritmos de búsqueda, para

Más detalles

FUNDAMENTOS DE OBJECT PASCAL

FUNDAMENTOS DE OBJECT PASCAL FUNDAMENTOS DE OBJECT PASCAL 1. ASPECTOS GENERALES DE LA SINTAXIS Los bloques de código quedan delimitados por y end. Se usa punto y coma como separador de sentencias de código. Comentarios: - ias líneas:

Más detalles

Tema 3: Programación funcional

Tema 3: Programación funcional Tema 3: Programación funcional Contenidos 5. Funciones como tipos de datos de primera clase 5.1. Forma especial lambda 5.2. Las funciones son objetos de primera clase 5.3. Funciones de orden superior 6.

Más detalles

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados

Más detalles

Tema 2.- Expresiones y funciones

Tema 2.- Expresiones y funciones UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER

Más detalles

PRIMER TUTORIAL DE LipsWorks Personal Edition 6.0.1

PRIMER TUTORIAL DE LipsWorks Personal Edition 6.0.1 PRIMER TUTORIAL DE LipsWorks Personal Edition 6.0.1 Interprete 1. Realizar una suma Tipos de Datos Existen 2 Tipos de datos Átomos y Listas Datos Tipo Átomos: Los átomos son las expresiones LISP más elementales.

Más detalles

Breve introducción al funcionamiento de un interprete del lenguaje Lisp

Breve introducción al funcionamiento de un interprete del lenguaje Lisp Breve introducción al funcionamiento de un interprete del lenguaje Lisp Christian Chinchilla Brizuela Escuela Ciencias de la Computación e Informática Universidad de Costa Rica San José, Costa Rica christian.chinchilla@ecci.ucr.ac.cr

Más detalles

Introducción a Python Qué es Python?

Introducción a Python Qué es Python? Introducción a Python Qué es Python? Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Ampliación de Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Tipos de datos escalares 4. Operadores básicos

Más detalles

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante. Javascript (II) 1 Elementos Básicos: Comentarios: Para una línea // Esto es un Comentario Para un bloque /*......... */ Literales: Valores que puede tomar una variable o una constante. Ejemplos: "Soy una

Más detalles

Tema 7: Macros. Índice. 1 Introducción Conceptos previos Macros en Scheme Más ejemplos de macros Referencias...

Tema 7: Macros. Índice. 1 Introducción Conceptos previos Macros en Scheme Más ejemplos de macros Referencias... Índice 1 Introducción... 2 2 Conceptos previos...2 3 Macros en Scheme... 7 4 Más ejemplos de macros...10 5 Referencias...13 1. Introducción El primer párrafo del Revised5 Report on the Algorithmic Language

Más detalles

Macros en Lisp. 4.1. Cómo funcionan las macros?

Macros en Lisp. 4.1. Cómo funcionan las macros? Capítulo 4 Macros en Lisp Resumen Las macros en Lisp permiten al programador definir operadores que están implementados por transformación. La definición de una macro es esencialmente una función que genera

Más detalles

Tema 6: Programación funcional en Scala. Sesión 18: Programación funcional en Scala

Tema 6: Programación funcional en Scala. Sesión 18: Programación funcional en Scala Tema 6: Programación funcional en Scala Sesión 18: Programación funcional en Scala Referencias Programming in Scala. Martin Odersky, Lex Spoon, Bil Venners. Ed. Artima. Programming Scala. Dean Wampler,

Más detalles

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:

Más detalles

Rolando Burgos Cárdenas MANUAL DE REFERENCIA RAPIDA DE LISP. http://www.ing.udec.cl/~rburgosc/ e-mail: rburgosc@ing.udec.cl

Rolando Burgos Cárdenas MANUAL DE REFERENCIA RAPIDA DE LISP. http://www.ing.udec.cl/~rburgosc/ e-mail: rburgosc@ing.udec.cl Universidad de Concepción Facultad de Ingeniería Departamento de Ingeniería Informática Y Ciencias de la Computación MANUAL DE REFERENCIA RAPIDA DE LISP http://www.ing.udec.cl/~rburgosc/ e-mail: rburgosc@ing.udec.cl

Más detalles

JavaScript: Lenguaje de programación

JavaScript: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal: 45, -43 Con base octal: 043, -054 Con

Más detalles

Tema 6: Técnicas heurísticas en juegos

Tema 6: Técnicas heurísticas en juegos Inteligencia Artificial I Curso 2005 2006 Tema 6: Técnicas heurísticas en juegos José A. Alonso Jiménez Francisco J. Martín Mateos José L. Ruiz Reina Dpto. de Ciencias de la Computación e Inteligencia

Más detalles

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM Programación Web Tema 3.2 Java Script Estructura del Lenguaje Miguel Ángel Manso Emerson Castañeda Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM Contenido Variables Operadores Estructuras

Más detalles

Tema 10: Tipos de datos mutables

Tema 10: Tipos de datos mutables Índice 1 Introducción... 2 2 Primitivas set-car! y set-cdr!...2 2.1 Como implementar cons, set-car! y set-cdr!...3 3 Mutación... 3 4 Igualdad...6 5 TADs con datos mutables... 9 5.1 Lista ordenada... 9

Más detalles

4.3 Recursión en Scheme. Recursión simple y asignación

4.3 Recursión en Scheme. Recursión simple y asignación 4.3 Recursión en Scheme Recursión simple y asignación Recursión Simple Un procedimiento recursivo es aquel se aplica a si mismo. Ejemplo: (define length (lambda (ls (if (null? ls 0 (+ 1 (length (cdr ls

Más detalles

4.3 Recursión en Scheme

4.3 Recursión en Scheme 4.3 Recursión en Scheme Recursión simple y asignación Recursión Simple Un procedimiento recursivo es aquel se aplica a si mismo. Ejemplo: (define length (lambda (ls (if (null? ls 0 (+ 1 (length (cdr ls

Más detalles

Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1)

Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1) Tema 3: Características de la programación funcional Sesión 5: El paradigma funcional (1) Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z- H-10.html#%_sec_1.1.5][The

Más detalles

4 MACROS EN LISP. Construye la expresión especificada por la definición de la marco, y entonces

4 MACROS EN LISP. Construye la expresión especificada por la definición de la marco, y entonces 4 MACROS EN LISP La definición de una macro es esencialmente el de una función que genera código Lisp un programa que genera programas Este mecanismo ofrece grandes posibilidades, pero también da lugar

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Sentencias de control en lenguaje Sentencias de control en lenguaje Introducción Sentencia if-else Sentencia switch Sentencia while Sentencia

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

PROGRAMACIÓN AUTOLISP

PROGRAMACIÓN AUTOLISP Departamento de Ingeniería Geográfica y Técnicas de Expresión Gráfica PROGRAMACIÓN AUTOLISP (PERSONALIZACIÓN DE AUTOCAD P Pa a/2 cenp a/2 ceng T a/3 a a/2 a/3 cen T a/2 a/12 a a/12 a/12 Sistema de rectas

Más detalles

FUNCIONES BÁSICAS TIMES ADD1 SUB1

FUNCIONES BÁSICAS TIMES ADD1 SUB1 LENGUAJES DE PROGRAMACIÓN (Sesión 10) 5. PROGRAMACIÓN FUNCIONAL 5.3. Subprogramas y gestión de almacenamiento 5.4. Evaluación del lenguaje Objetivo: Manejar la estructura de un programa bajo LISP y evaluarlo

Más detalles

Insertar Datos en Tablas

Insertar Datos en Tablas Insertar Datos en Tablas La instrucción básica para insertar valores a los atributos (columnas) de una tabla es la instrucción INSERT INTO Insertar una sola tupla Para insertar una tupla en la tabla, se

Más detalles

Estructuras de Control

Estructuras de Control Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas

Más detalles

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

El sintetizador de programas de Cornell

El sintetizador de programas de Cornell El sintetizador de programas de Cornell T. Teitelbaum, T. Repps: The Cornell Program Synthesizer: A Syntax-Directed Programming Environment. Comm. ACM, V.24 N.9 pp.563-673, Sep.1981. 1. Características

Más detalles

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C Laboratorio de Arquitectura de Redes Sentencias de control en lenguaje C Sentencias de control en lenguaje C Introducción Sentencia if-else Sentencia switch Sentencia while Sentencia do-while Sentencia

Más detalles

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores aritméticos Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritméticas

Más detalles

2 INTRODUCCIÓN A LISP

2 INTRODUCCIÓN A LISP 2 INTRODUCCIÓN A LISP El objetivo de este capítulo es que puedan programar en Lisp tan pronto como sea posible Al final de la misma, conocerán lo suficiente de Lisp como para comenzar a escribir sus propios

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia

Más detalles

Conocer los tipos de esquemas condicionales. Entender su funcionamiento y sus diferencias. 1. Introducción. 3. Esquemas condicionales en C

Conocer los tipos de esquemas condicionales. Entender su funcionamiento y sus diferencias. 1. Introducción. 3. Esquemas condicionales en C Tema 4. Esquemas Condicionales Objetivos Conocer los tipos de esquemas condicionales Entender su funcionamiento y sus diferencias Ser capaz de aplicarlos en ejemplos sencillos 1. Introducción 4. Esquemas

Más detalles

Programación.Net Lenguaje C#

Programación.Net Lenguaje C# En esta guía: Programación.Net Lenguaje C# Conversiones de Tipos... 1 Conversión boxing y unboxing... 1 Boxing... 1 Unboxing... 1 Conversiones Implícitas... 2 Conversiones Explícitas... 2 Conversiones

Más detalles

Tema 7: Programación imperativa. Sesión 21: Programación imperativa (2)

Tema 7: Programación imperativa. Sesión 21: Programación imperativa (2) Tema 7: Programación imperativa Sesión 21: Programación imperativa (2) Indice Historia de la programación imperativa Características principales Datos mutables en Scheme y en Scala Estructuras de control

Más detalles

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco ING1310 Introducción a la Computación Python Conceptos Básicos Carlos Reveco creveco@dcc.uchile.cl careveco@miuandes.cl Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

JavaScript: Variables

JavaScript: Variables JavaScript: Variables Una variable es un elemento que se emplea para almacenar y hacer referencia a otro valor. Gracias a las variables es posible crear "programas genéricos", es decir, programas que funcionan

Más detalles

Programación Interactiva

Programación Interactiva Capítulo 6 Programación Interactiva 6.1 Cadenas Una cadena es una secuencia de caracteres encerrados en comillas dobles. Scheme proporciona varios procedimientos para manipular cadenas: Procedimiento string?

Más detalles

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1 Departamento de Lenguajes y Sistemas Informáticos JavaScript Programación en Internet Curso 2005-2006 Contenidos Introducción El lenguaje Validación de formularios DLSI - Universidad de Alicante 1 Introducción

Más detalles