introducci n a lisp
Download
Skip this Video
Download Presentation
Introducción a LISP

Loading in 2 Seconds...

play fullscreen
1 / 20

Introducción a LISP - PowerPoint PPT Presentation


  • 100 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Introducción a LISP' - tuyet


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
introducci n a lisp

Introducción a LISP

Sergio Jiménez Celorrio

Departamento Ingeniería Informática – UC3M

introducci n
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
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, 3.001
    • Strings: “Hola mundo”
  • Otros:
    • arrays, vectores, tablas hash,…
    • Estructuras y Clases definidas por el usuario
operadores b sicos
Operadores Básicos
  • Numéricos:
    • Suma
      • (+ 1 2)
      • (+ 1 2 3 4)
    • Resta
      • (- 4 2)
      • (- 10 2 2 2)
    • Producto
      • (* 3 2)
      • (* 2 2 2 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
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
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
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
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
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
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
Creación de Listas
  • (setf *lista* ‘(1 2 3 4 5))
  • (setf *lista* (list 1 2 3 4 5))
funciones b sicas de manejo de listas
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 ‘(2 3 4 5))
  • (append ‘(1 2) ‘(3 4 5))
  • (member 1 ‘(3 4 1 5 6))
  • (sort ‘(3 2 1) ‘<)
  • (remove 1 ‘(3 4 1 5 6))
  • (length ‘(3 2 5))
declaraci n de funciones de usuario
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
Apply y Funcall
  • Permiten aplicar una función a un conjunto de datos
    • Apply (apply #’+ ‘(2 3))
    • Funcall: (funcall #’+ 2 3)
mapcar
Mapcar
  • Permite aplicar una función a cada uno de los elementos de una lista.

(mapcar #’list ‘(1 2 3 4))

(mapcar #’+ ‘(1 2 3 4)’(10 20 30 40))

funciones lambda
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
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
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
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.
slide20
Web
  • Referencia Funciones Lisp
    • http://www.lispworks.com/documentation/HyperSpec/Front/index.htm
ad