20
Lenguajes de Programación Lenguajes funcionales: LISP M.C Said Zamora

Notas Lenguajes de Programación LISP

Embed Size (px)

DESCRIPTION

Notas

Citation preview

Page 1: Notas Lenguajes de Programación LISP

Lenguajes de ProgramaciónLenguajes funcionales: LISP

M.C Said Zamora

Page 2: Notas Lenguajes de Programación LISP

Expresiones

• LISP evalúa expresiones definidas por el usuario.

• USER(1): (* 2 (cos 0) (+ 4 6))

• Formas, f(x) equivale a (f x)

Page 3: Notas Lenguajes de Programación LISP

Funciones numéricas

• (+ x1 x2 ... xn)

• (* x1 x2 ... xn)

• (- x y)

• (/ x y)

• (rem x y)

• (abs x)

• (max x1 x2 ... xn)

• (min x1 x2 ... xn)

Page 4: Notas Lenguajes de Programación LISP

Funciones

• USER(2): (defun double (x) (* x 2))

• USER(3): (double 3)

Page 5: Notas Lenguajes de Programación LISP

Recursividad

• (defun factorial (N)

• “Factorial de N."

• (if (= N 1)

• 1

• (* N (factorial (- N 1)))))

Page 6: Notas Lenguajes de Programación LISP

Operadores relacionales

• (= x y)

• (/= x y)

• (< x y)

• (> x y)

• (<= x y)

• (>= x y)

Page 7: Notas Lenguajes de Programación LISP

Recursividad múltiple

• (defun fibonacci (N)

• "N‘ numero de Fibonacci."

• (if (or (zerop N) (= N 1))

• 1

• (+ (fibonacci (- N 1)) (fibonacci (- N 2)))))

• Zerop es un predicado.

Page 8: Notas Lenguajes de Programación LISP

Operadores lógicos y funciones predefinidas

• (1+ x) (+ x 1)

• (1- x) (- x 1)

• (zerop x) (= x 0)

• (plusp x) (> x 0)

• (minusp x) (< x 0)

• (evenp x) (= (rem x 2) 0)

• (oddp x) (/= (rem x 2) 0)

• (or x1 x2 ... xn)

• (and x1 x2 ... xn)

• (not x)

Page 9: Notas Lenguajes de Programación LISP

Listas

• Computación simbólica.

• Estructura de datos recursiva.

• Constructor

• Selector

• Reconocedor

Page 10: Notas Lenguajes de Programación LISP

Constructores

• Nil

• (cons x L)

• USER(21): (cons 1 (cons 2 nil))

• (quote (2 3 5 7 11 13 17 19))

• '(2 3 5 7 11 13 17 19)

Page 11: Notas Lenguajes de Programación LISP

Selectores

• (first '(2 4 8))

• (rest '(2 4 8))

Page 12: Notas Lenguajes de Programación LISP

Reconocedores

• USER(29): (null nil)

• T

• USER(30): (null '(1 2 3))

• NIL

• USER(31): (consp nil)

• NIL

• USER(32): (consp '(1 2 3))

• T

Page 13: Notas Lenguajes de Programación LISP

Recursividad estructural

• USER(33): (list-length '(2 3 5 7 11 13 17 19))

• (defun recursive-list-length (L)

• (if (null L)

• 0

• (1+ (recursive-list-length (rest L)))))

Page 14: Notas Lenguajes de Programación LISP

• USER(40): (trace recursive-list-length)

• (RECURSIVE-LIST-LENGTH)

• USER(41): (recursive-list-length '(2 3 5 7 11 13 17 19))

• 0: (RECURSIVE-LIST-LENGTH (2 3 5 7 11 13 17 19))

• 1: (RECURSIVE-LIST-LENGTH (3 5 7 11 13 17 19))

• 2: (RECURSIVE-LIST-LENGTH (5 7 11 13 17 19))

• 3: (RECURSIVE-LIST-LENGTH (7 11 13 17 19))

• 4: (RECURSIVE-LIST-LENGTH (11 13 17 19))

• 5: (RECURSIVE-LIST-LENGTH (13 17 19))

• 6: (RECURSIVE-LIST-LENGTH (17 19))

• 7: (RECURSIVE-LIST-LENGTH (19))

• 8: (RECURSIVE-LIST-LENGTH NIL)

• 8: returned 0

• 7: returned 1

• 6: returned 2

• 5: returned 3

• 4: returned 4

• 3: returned 5

• 2: returned 6

• 1: returned 7

• 0: returned 8

• 8

Page 15: Notas Lenguajes de Programación LISP

Símbolos

• No diferencia mayúsculas y minúsculas

• `t = t

Page 16: Notas Lenguajes de Programación LISP

Enésimo

• USER(59): (nth 0 '(a b c d))

• A

• USER(60): (nth 2 '(a b c d))

• C

Page 17: Notas Lenguajes de Programación LISP

Member

• USER(64): (member 'b '(hola)) ;

• NIL

• USER(65): (member ‘y '( y hola)) ;

• ‘(y hola)

Page 18: Notas Lenguajes de Programación LISP

• (= x y)

• (eq x y)

• (eql x y)

• (equal x y)

• (equalp x y)

Page 19: Notas Lenguajes de Programación LISP

Reverse L

• USER(1): (reverse '(1 2 3 4))

• (4 3 2 1)

• USER(2): (reverse '(1 (a b) (c d) 4))

• (4 (c d) (a b) 1)

• USER(3): (reverse nil)

• NIL

Page 20: Notas Lenguajes de Programación LISP

Estado del programa, variables.

• (defparameter * contador * 0)

• (defparameter *umbral* 4)

• (defun contador ()

• (if (>= (1+ *contador*) * umbral *)

• (setf * contador * 0)

• (setf * contador * (1+ * contador *))))

• (defun valor ()

• *counter*)

• (defun valorumbral ()

• *umbral*)