Introducci n a lisp
This presentation is the property of its rightful owner.
Sponsored Links
1 / 20

Introducción a LISP PowerPoint PPT Presentation


  • 68 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

Introducción a LISP

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.


    Introducci n a lisp

    Web

    • Referencia Funciones Lisp

      • http://www.lispworks.com/documentation/HyperSpec/Front/index.htm


  • Login