La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Lenguaje de Programación LISP

Presentaciones similares


Presentación del tema: "Lenguaje de Programación LISP"— Transcripción de la presentación:

1 Lenguaje de Programación LISP
Parte 3

2 Puntos a tratar 3 Primitivas Básicas 3.1 PRIMITIVAS NUMÉRICAS
3.2 PRIMITIVAS DE ASIGNACIÓN 3.3 PRIMITIVAS QUE ACTUAN SOBRE LISTAS 3.3.1 PRIMITIVAS DE ACCESO LISTAS 3.3.2 PRIMITIVAS DE CONSTRUCCIÓN DE LISTAS 3.3.3 OTRAS PRIMITIVAS QUE ACTUAN SOBRE LISTAS 3.4 PREDICADOS 3.4.1 PREDICADOS QUE DISTINGUEN EL TIPO DE DATO 3.4.2 PREDICADO EQUAL 3.4.3 PREDICADOS QUE ACTUAN SOBRE NÚMEROS 3.4.4 PREDICADOS QUE ACTUAN SOBRE LISTAS 3.4.5 FUNCIONES LÓGICAS 3.5 PRIMITIVAS DE DEPURACIÓN 3.5.2 PRIMITIVAS TRACE Y UNTRACE

3 Primitivas Numéricas (I)
Trabajan con números y operaciones aritméticas básicas (suma, resta, multiplicación y división). Utilización de notación prefija. Función Suma (+): Puede tener cualquier numero de argumentos. Devuelve como resultado la suma de todos ellos. En caso de no tener argumentos, devuelve 0. Ej.: ( ) -> 9 Función Resta (-): Puede tener uno o más argumentos. Un argumento, devuelve el opuesto de dicho argumento (operación menos unitaria). Dos argumentos, devuelve el resultado de restar el segundo al primero (operación resta tradicional). Más de dos argumentos, devuelve el resultado de restar al primer argumento la suma de todos los demás. (+ 1 1) -> 2 (+ 2) -> 2 (+ ) -> 0

4 Primitivas Numéricas (II)
Función Resta (-): Ej.: (- 3) -> - 3 Función Producto (*): Puede tener cero o más argumentos. A partir de dos, devuelve el resultado de multiplicar de todos ellos. Un argumento, devuelve el valor del argumento. Con cero argumentos, devuelve un 1. Ej.: (* ) -> 6 Función División (/): Puede tener uno o dos argumentos. Un argumento, devuelve el resultado de dividir 1 entre dicho argumento (el inverso del numero al que se aplica). Dos argumento, actúa como la división normal (dividiendo el primer argumento [dividendo] entre el segundo [divisor]). ( ) -> 4 ( ) -> 2 ( ) -> 1 (* ) -> 16 (* 3) -> 3 (* ) -> 1

5 Primitivas Numéricas (III)
Función División (/): Ej.: (/ 2) -> 0,5 Función TRUNCATE: Actúa sobre dos argumentos y devuelve como resultado dos valores. El primer valor es el resultado de efectuar la división entera entre su primer argumento y su segundo argumento. El segundo valor es el resto de esta división (el primer argumento modulo el segundo). Ej.: (truncate 5 2) -> 2 1 Función MULTIPLE-VALUE-LIST: Agrupa múltiples valores en una lista. Ej.: (multiple-value-list (truncate 5 2) ) -> (2 1) (/ ) -> 4

6 Primitivas de Asignación (I)
La función SETQ asigna a un símbolo un valor cualquier. Después de esto el símbolo tiene ligado dicho valor. Si se evalúa posteriormente el símbolo se devolverá el valor ligado. SETQ tiene dos argumentos, el primero es un símbolo y el segundo el valor que se desea asignar a dicho símbolo: (setq símbolo expresión) Es una función especial por: Es una función de tratamiento especial porque no evalúa todos y cada uno de sus argumentos. Es de efecto lateral porque además de devolver un valor realiza alguna otra cosa más. Ej1.: (setq A ‘ ( ) ) -> tratamiento especial: efecto lateral: ( ) No evalúa A, pues o no tiene valor o se le va a cambiar. A queda ligado a (1 2 3), y se devuelve la lista (1 2 3).

7 Primitivas de Asignación (II)
Ej2.: (setq A ( ) ) -> efecto lateral: A -> 3 (Al ligar un nuevo valor a A se reemplaza el que anteriormente tuviera) La función SETQ puede utilizarse también para efectuar varias asignaciones al mismo tiempo: (setq símbolo1 expresión1 símbolo2 expresión2 ..) Otra primitiva de asignación: SET (set símbolo expresión) Puede tener múltiples argumentos. Primero evalúa todos y cada uno de sus argumentos. El resultado de evaluar símbolo debe ser, a su vez, un símbolo, al cual será ligado al resultado de evaluar la expresión. 3 A queda ligado al valor 3, que es el resultado de evaluar (+ 1 2).

8 Primitivas de Asignación (III)
Ej.: (setq A ‘ B ) -> B (set A ‘ C) -> C Si evaluamos a continuación los símbolos A y B: A ¿Y si no estuviera (setq A ‘ B )? -> Error Solución: QUOTE (set ‘ A ‘ C) B -> C (A no está ligado a otro símbolo).

9 Primitivas que actúan sobre Listas (I)
Primitivas de acceso a listas: CAR, CDR, NTH y NTHCDR La función CAR, admite como único argumento una lista y devuelve como resultado el primer elemento de lista . La función CDR, admite como único argumento una lista y devuelve como resultado la cola de esa lista (una lista que contiene todos los elementos excepto el primero). Si la lista contiene un único elemento devolverá NIL (lista vacía). Ej.: (setq L ‘ (A B C)) -> (A B C) Cuando varios CAR y CDR se componen (máximo 3), se emplea una notación alternativa (comenzar por una C, añadir una A por cada CAR y una D por cada CDR según el orden de aparición, y terminar con una R). Ej.: (car (cdr (cdr L) ) ) equivale a (caddr L) (cdr (car ‘ ((1 2) 3) ) equivale a (cdar ‘ ((1 2) 3) ) (car L) -> A (cdr L) -> (B C) (cdr L) (car ) (car ) (cdr ) (cdr L) -> B -> C

10 Primitivas que actúan sobre Listas (II)
Primitivas de acceso a listas: CAR, CDR, NTH y NTHCDR La función NTH, devuelve el n-ésimo elemento de una lista (el primer elemento de la lista se identifica con la posición 0). Sus argumentos son el índice o posición del elemento y la lista. Equivale a aplicar tantos CAR como indique el índice. Ej.: (nth 2 ‘ ( ) ) -> 3 (nth 0 ‘ (A B C) ) -> A La función NTHCDR, devuelve el resultado de aplicar tantos CDR como indique el índice, de modo que (NTHCDR 1 L) equivale a (CDR L), (NTHCDR 2 L) equivale a (CDDR L), etc. Ej.: (nthcdr 2 ‘ ( ) ) -> (3 4)

11 Primitivas que actúan sobre Listas (III)
Primitivas de construcción de listas: CONS, LIST y APPEND La función CONS toma como argumentos un elemento y una lista, y devuelve como resultado la lista que se pasó como parámetro añadiéndole al principio el elemento. Ej.: (cons ‘ A '(1 2 3) ) -> (A 1 2 3) (cons ‘ (1 2) ‘ (3 4 5) ) -> ( (1 2) ) La función LIST puede tener cualquier número de argumentos, y devuelve como resultado una lista construida con todos ellos, de modo que cada argumento será un elemento de la lista. Ej.: (list ‘ A ‘ B ‘ (C D) 5 ) -> (A B (C D) 5) (list ‘ CASA ) -> (CASA) (list ) -> NIL

12 Primitivas que actúan sobre Listas (IV)
Primitivas de construcción de listas: CONS, LIST y APPEND La función APPEND toma como argumentos cualquier número de listas, y devuelve una lista construida con los elementos de todas las listas argumentos. Su funcionamiento es similar al de LIST pero eliminando un nivel de paréntesis (el del primer nivel). Ej.: (append ‘ (A B) '(C D) ) -> (A B C D) (append ‘ ( (1 2) 3) ‘ (A) ‘ (B (C))) -> ( (1 2) 3 A B (C) ) (append NIL) -> NIL

13 Primitivas que actúan sobre Listas (V)
Otras primitivas: LENGTH, REVERSE, LAST y REMOVE La función LENGTH, devuelve la longitud de una lista (el número de elementos de la misma). LENGTH sólo va a contar los elementos del primer nivel. Ej.: (length ‘ (A B C D) ) -> 4 (length ‘ (A (B C) D) ) -> 3 La función REVERSE tiene como argumento una lista, y devuelve como resultado dicha lista invertida. La inversión se realiza en el primer nivel (se invierte el orden de sus elementos pero sin tocar los elementos en sí). Ej.: (reverse ‘ (A B C D) ) -> (D C B A) (reverse ‘ (A (B C) D) ) -> (D (B C) A)

14 Primitivas que actúan sobre Listas (V)
Otras primitivas: LENGTH, REVERSE, LAST y REMOVE La función LAST, devuelve una lista conteniendo el último elemento de la lista que se le pasa como parámetro de entrada. Ej.: (last ‘ (1 B 3) ) -> (3) (last ‘ (1 (A 2) ) ) -> ( (A 2) ) La función REMOVE elimina un elemento de una lista, y devuelve la lista resultante. Dos argumentos, el primero es el elemento que queremos eliminar y el segundo la lista de la que queremos suprimirlo. Si el elemento no se encuentra en la lista se devuelve la propia lista (no hay nada que eliminar), y si el elemento aparece varias veces se eliminan todas sus apariciones. Ej.: (revome ‘ A ‘ (1 A B A 3) ) -> (1 B 3) (remove ‘ C ‘ (1 A B A 3) ) -> (1 A B A 3)

15 Predicados (I) Son un tipo especial de función ya que devuelve Verdadero o Falso, en Lisp estos valores se representan: Falso  NIL , () Verdadero  T ó cualquier otra cosa distinta de NIL Los nombres de predicado suelen terminar con la letra P. Predicados que distinguen el tipo de dato: NUMBERP, LISTP, ATOM y STRINGP Devuelven T cuando su argumento pertenece al tipo de dato sobre el que se pregunta y NIL en otro caso. Ej.: (numberp 12) -> T (numberp ‘A) -> NIL (listp ‘(1 2) ) (listp ‘B ) -> NIL (atom T ) -> T (atom ‘(1 2) ) -> NIL (atom NIL ) -> T (atom ‘A ) -> T (stringp “casa”) -> T

16 Predicados (II) Predicado EQUAL
Acepta dos argumentos de cualquier tipo y devuelve T si éstos son iguales. Ej.: (equal ‘ (A (B C) 2) ‘ (A (B C) 2) ) -> T (equal 1 ‘ (B C) ) -> NIL (equal 3 ( ) ) Predicados sobre números: ZEROP, LESSP (<), y GREATERP (>) ZEROP, devuelve T si su argumento es cero y NIL en caso contrario. Utilizado con frecuencia como condición de terminación en recursividad. LESSP o <, devuelve T cuando el primer argumento es menor que el segundo y NIL en caso contrario Ej.: (lessp 5 7) (setq A 3 ) -> 3 (equal A (+ 1 B) ) -> ¿? (< ) -> NIL (< ) -> NIL

17 Predicados (III) Predicados que actúan sobre listas: NULL, y MEMBER
GREATERP o >, devuelve T cuando el primer argumento es mayor que el segundo y NIL en caso contrario. Existen otros tres predicados sobre números <=, >= e =. Todos estos predicados devolverán error si sus argumentos no son números. Ej.: (greaterp 7 6) -> T (> 5 8) -> NIL Predicados que actúan sobre listas: NULL, y MEMBER NULL, devuelve T si el argumento es NIL o lista vacía, NIL en caso contrario. Utilizado con frecuencia como condición de terminación en recursividad sobre listas. Ej.: (null NIL) (= 0 3) -> NIL (setq n 0) -> 0 (= n 0) -> T (null T ) -> NIL

18 Predicados (IV) Predicados que actúan sobre listas: NULL, y MEMBER
MEMBER, tiene como argumentos un átomo y una lista, devuelve NIL si el átomo no se encuentra en la lista, en otro caso devuelve la sublista a partir de su primera aparición. Puede recibir también otros parámetros. Ej.: (member ‘ A ‘(B A C)) -> (A C) Funciones Lógicas: NOT, AND y OR NOT de lisp equivale a la negación lógica. AND pueden tener cualquier número de argumentos, equivale a la y lógica. Se van evaluando los argumentos, en el momento en que un argumento es NIL, deja de evaluar los argumentos y devuelve NIL. Si ningún argumento es NIL, devuelve el resultado de evaluación del último argumento. Ej.: (and (zerop 3) ‘A) -> NIL (‘A no se evalúa) (member ‘ A ‘(A B C)) -> (A B C) (member ‘ A ‘(1 2 3)) -> NIL (and (zerop 3) (+ ‘A ‘A)) -> NIL (and T T (+ 1 2)) -> 3

19 Predicados (V) Funciones Lógicas: NOT, AND y OR
Podemos utilizar el AND como un if condicional, ya que sólo se ejecutará y devolverá el resultado de evaluar el último argumento en caso de que todas las expresiones anteriores sean verdaderas. Ej.: (setq A 5) -> 5 (setq B 6) -> 6 (and (< A B) A) -> 5 (and (> A B) A) -> NIL (setq A 5) -> (setq B '(5)) -> (5) (and (numberp A) (+ A A)) -> 10 (and (numberp B) (+ B B)) -> NIL (No da error porque (+ B B) no llega a evaluarse)

20 Predicados (VI) Funciones Lógicas: NOT, AND y OR
OR pueden tener cualquier número de argumentos, equivale al o lógico. Se van evaluando los argumentos, en el momento en que un argumento no es NIL, deja de evaluar los argumentos y devuelve el resultado de la evaluación. Si ningún argumento es cierto, devuelve NIL. Ej.: (or (zerop 3) (member 1 ‘(2 1 3)) (equal ‘A ‘B)) -> (1 3) (or (member A ‘(2 1 3)) (equal ‘A ‘A)) -> T (or (member 4 ‘(2 1 3)) (equal ‘A ‘B)) ->NIL

21 Primitivas de Depuración
Primitivas TRACE y UNTRACE TRACE, se aplica sobre un nombre de función. Provoca, como efecto lateral, que cada vez que llamemos a la función sobre la que hemos aplicado el trace, se escriba un mensaje por pantalla. Ej.: (trace cdr) (cdr (cdr ‘(1 2 3))) Entering CDR, argument list ( (1 2 3) ), result (2 3) Entering CDR, argument list ( (2 3) ), result (3) -> (3) UNTRACE, inhabilita la salida de las trazas sobre la función a la que se aplica. Ej.: (untrace cdr)


Descargar ppt "Lenguaje de Programación LISP"

Presentaciones similares


Anuncios Google