Introducción a LISP Sergio Jiménez Celorrio Departamento Ingeniería Informática – UC3M.

Slides:



Advertisements
Presentaciones similares
Rogelio Dávila Pérez Profesor - Investigador
Advertisements

INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
Curso de Java Capitulo 6: Cadenas y Arrays Profesor:
Abstracción de Datos Arrays.
Python CI-2200 Programación Avanzada en Sistemas UNIX.
Prototipo de compilador didáctico del lenguaje LC99
Lenguajes de programación
Desarrollo de Aplicaciones para Internet
CADENAS EN PHP.
Tema 2: Lenguaje PHP básico
INFORMATICA I Funciones CLASE 13.
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Programación.
Unidad III Programación Funcional
Universidad de Tarapacá Fundamentos Lenguaje y Programación Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales.
Programación en C para electrónica
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
DESARROLLO DE APLICACIONES WEB
M.C. Juan Carlos Olivares Rojas
14/04/ Implementación de un lenguaje basado en reglas. José Angel Bañares. V LenguajeReglas.ppt ImplementaciónReglas Implementación de motores.
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Programación II Ing. Diego J. Arcusin 8 – Perl.
Tema 1: Lenguaje PHP básico Ing. Tulio Nel Benavides Peña
1 SEMANA 04_2. 2 OPERADORES ARITMETICOS OPERADOR: + FORMATO: VALOR1 + VALOR2 FUNCION : SUMA VALOR1 Y VALOR2 EJEMPLO : TABLA_MAS_2 DW TABLA + 2 ; (DESPLAZAMIENTO.
Extensiones sintácticas Revisaremos formas especiales que son sintácticamente equivalentes a patrones que son expresables en términos de formas básicas.
Sesión 5 Sentencias de Selección y repetición Prof:Eridan Otto Programación de Computadores Lenguaje Pascal.
Agenda Clase 16 Motivación e Historia de la Programación Funcional y la Programación Lógica. Concepto y Características de la Programación Funcional. Ventajas.
Programación Básica con NQC Patricio A. Castillo Pizarro 25/08/2007.
COMPONENTES DE UN ALGORITMOS
Representación en LISP
Procesadores de Lenguajes
El Lenguaje C++. Creación de programas simples de C++ Builder como ejercicios en C++. Los elementos de control fundamentales en C++, incluyendo operadores.
Tema 3: Operadores Antonio J. Sierra. Índice Aritméticos A nivel de bit Relacionales Lógicos Asignación.
VBA – Elementos del Lenguaje
1 LISP II l Contenido de la sesión  Organización de memoria y Operaciones destructivas  Funciones anónimas. Variables. Alcances.  A-listas. Pattern.
1 TEMA IMPLEMENTACION DE LENGUAJES FUNCIONALES. Lecciónes.
Informática Ingeniería en Electrónica y Automática Industrial
Control de Flujo.
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
El lenguaje LISP.
LISP I.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
1 El lenguaje LISP “LISP is an easy language to learn” (Henry et.al., 1984)
PROGRAMACIÓN MULTIMEDIA
IDENTIFICADORES Un identificador es un "nombre" que nos permite dirigirnos específicamente a una de las entidades propias del lenguaje, es decir, son los.
PEDRO ALBERTO ARIAS QUINTERO. El shell es un intérprete de órdenes, los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como.
Patricio A. Castillo José M. Galarce Agosto 23 de 2008 Segunda Clase.
Programación Básica con NQC Patricio A. Castillo 12/04/2008.
UNIVERSIDAD TECNICA PERTICULAR DE LOJA
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
PHP el Lenguaje Ejercicios Básicos.
Presente un cuestionario con los aspectos mas importantes sobre los
Fundamentos de Programación
UNIDAD 4: Introducción a la Lógica Computacional Objetivo : Interpretar y aplicar adecuadamente los fundamentos básicos de la estructura y funcionamiento.
Práctica Profesional PHP.
Es un tipo especial de software que nos permite *Crear *Desarrollar *Programar otras aplicaciones. Haciendo uso de sus conocimientos lógicos y lenguajes.
Base de datos Francisco Castro. Creación de una tabla drop table TABLA cascade constraints; /*==============================================================*/
Computación I. CI-2125 Tema VII
Lic. Carla Aguirre Montalvo
Arreglos: Vectores Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes.
Lenguaje de Programación LISP
Informática Ingeniería en Electrónica y Automática Industrial
Elementos básicos.  Fuertemente tipeado.  Sintaxis similar a C/C++.  Sin punteros: garbage collection.  Portable.  Integra librerías para objetos.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
OBJETIVOS DEFINIR LA ESTRUCTURA DE ARREGLOS. DECLARAR ARREGLOS EN C.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 5.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Departamento de Informática Universidad Técnica Federico Santa María Lenguajes Funcionales Francisco Bórquez Departamento de Informática Universidad Técnica.
Transcripción de la presentación:

Introducción a LISP Sergio Jiménez Celorrio Departamento Ingeniería Informática – UC3M

Introducción List Processing Desarrollado en 1958, en el MIT por John McCarthy Lenguaje mas popular en IA – Declarativo – Alto Nivel Diferentes Intérpretes – CLISP, Allegro, CMUCL, … Aplicaciones – Emacs, Autocad…

Tipos de datos Listas, Elemento Fundamental del Lenguaje – (funcion x y z) – (print “Hola Mundo”) Átomos – Símbolos: var1, contador, … – Valores Lógicos: t, nil – Números: 3, – Strings: “Hola mundo” Otros: – arrays, vectores, tablas hash,… – Estructuras y Clases definidas por el usuario

Operadores Básicos Numéricos: – Suma  (+ 1 2)  ( ) – Resta  (- 4 2)  ( ) – Producto  (* 3 2)  (* ) Lógicos: – And  (and t nil)  (and 1 2 3) – Or  (or t nil)  (or 1 2 3) – Not  (not nil)  (not 1),  (not “hola”)

Evaluación de una expresión LISP (I) Directamente en el prompt del intérprete Desde un fichero  (load “prueba.lisp”)

Evaluación de una expresión LISP (II) ‘ y quote impide la evaluación de una expresión:  (+ 3 5)  ‘(+ 3 5)  (quote (+ 3 5)) eval evalúa una expresión dos veces  (eval (quote (+ 3 5)))  (eval ‘(+ 3 5))

Variables Inicializaciones  (defvar *contador* 1) Cambiando el valor a una variable  (setf *contador* 2) Variables locales  (let ((contador 1)) (print contador))  (let ((contador 1)) (setf contador 2) (print contador))

Condiciones  (if (= *a* *b*) (print “hola”) (print “adios”))  (when (= *a* *b*) (print “hola”)) – Equivalente a (if (= *a* *b*) (print “hola”))  (unless (= *a* *b*) (print “hola”)) – Equivalente a (if (not (= *a* *b*)) (print “hola”))  (Cond ((= *a* *b*) (print “uno”)) ((> *a* *b*) (print “dos”)) (t (print “tres”)))

Relaciones de Igualdad EQ (el más específico), compara si dos variables apuntan al mismo objeto.  (eq ‘(a b c) ‘(a b c)) NIL  (setf x 1) (setf y x) (eq x y) T EQL como EQ pero también compara números si son del mismo tipo o para caracteres  (eql x y) T  (eql 3 3) T  (eql 3.0 3) NIL EQUAL (El más general)  (equal ‘(a b c) ‘(a b c )) T  (equal 3.0 3) T  (equal “hola” “HOLA”) NIL EQUALP Como EQUAL pero compara cadenas en mayúsculas y minúsculas  (equalp “hola” “HOLA”) T Relaciones numéricas: =, =

Bucles  (dotimes (i 3) (print i))  (dolist (i ‘(0 1 2)) (print i))  (setf *i* 0) (loop (when (= *i* 3) (return)) (print *i*) (setf *i* (+ *i* 1)))

Creación de Listas (setf *lista* ‘( )) (setf *lista* (list ))

Funciones Básicas de Manejo de Listas  (car *lista*) = (first *lista*) = (nth 0 *lista*)  (rest *lista*) = (cdr *lista*)  (last *lista*) = (list (nth (- (length lista) 1) *lista*))  (push 8 *lista*)  (pop *lista*)  (cons 1 ‘( ))  (append ‘(1 2) ‘(3 4 5))  (member 1 ‘( ))  (sort ‘(3 2 1) ‘<)  (remove 1 ‘( ))  (length ‘(3 2 5))

Declaración de Funciones de Usuario (defun nombre (args) “descripcion” (expresión)) – (defun mi-funcion (lista) “obtiene el primer elemento del argumento lista” (car lista)) Devuelven el valor de la última expresión

Apply y Funcall Permiten aplicar una función a un conjunto de datos – Apply (apply #’+ ‘(2 3)) – Funcall: (funcall #’+ 2 3)

Mapcar Permite aplicar una función a cada uno de los elementos de una lista. (mapcar #’list ‘( )) (mapcar #’+ ‘( )’( ))

Funciones Lambda Permite definir funciones en tiempo de ejecución – Muy útil para las funciones tipo map o para definir funciones de Test (mapcar #’(lambda (x) (format t “El doble de ~a es ~a~&“ x (* 2 x))) ‘(1 2 3)) (member 2 ‘((1 2) (3 4) (5 6)) :test #’(lambda (x y) (equal x (second y))))

Entrada / Salida Lectura sobre entrada estándar  (setf *respuesta* (read)) Escritura sobre salida estándar  (print “Hola mundo”) Salida con formato (format t literal argumentos) – El literal puede indicar: ~% nueva línea ~d número ~a carácter  (format t “el cuadrado de ~d es ~d ~&” 3 (* 3 3)) Abrir un fichero.  (setq fichero (open “nombre-fichero” :direction :input)) Escribir en un fichero.  (format fichero “el cuadrado de ~d es ~d ~&” 3 (* 3 3)) Cerrar fichero  (close fichero)

Buenos hábitos de programación Introducir comentarios – ; para comentar una línea – #| para comentar Varias líneas |# Nombres de variables y funciones descriptivos Funciones con pocas líneas y cortas Utilice editor que resalte emparejado de paréntesis y con sangría automática – (i.e. emacs o xemacs) Use cond en lugar de ifs anidados Variables globales comiencen y acaben con * – *variable1* Utilice lógica positiva al dar nombre a las funciones y predicados: que devuelvan t si es cierto. – (numberp 5)

Libros LISP : el lenguaje de la inteligencia artificial / A.A. Berk AutoLISP versión 12 / José Antonio Tajadura Zapirain, Javier López Fernández LISP / Patrick Henry Winston, Berthold Klaus Paul Horn Common LISP : the language. Steele, Guy L.

Web Referencia Funciones Lisp –