laboratorio

12
Laboratorio Nº 2 ;; Asignación: Para asignar valores se utiliza también los comandos CL-USER 1 > (setf n 19) 19 CL-USER 4 > (setf x 20) 20 CL-USER 5 > (setf p (- 30 x)) 10 CL-USER 6 > (setq q (* 5 p)) 50 ;; NIL es un Atom y una List, su valor es vacío. ;; atoms reservados CL-USER 2 > nil NIL CL-USER 3 > t T ;; Para evaluar una lista se invoca a una función de la forma siguiente: ;; (función-name arg1 ………….argn) CL-USER 4 > (+ 54 23 12) 89 CL-USER 5 > (sqrt n) 4.358899 CL-USER 8 : 1 > (- 30 n) 11

Upload: bj-r-ferrel-g

Post on 14-Nov-2015

26 views

Category:

Documents


0 download

DESCRIPTION

ejercicios

TRANSCRIPT

  • Laboratorio N 2

    ;; Asignacin: Para asignar valores se utiliza tambin los comandos

    CL-USER 1 > (setf n 19)

    19

    CL-USER 4 > (setf x 20)

    20

    CL-USER 5 > (setf p (- 30 x))

    10

    CL-USER 6 > (setq q (* 5 p))

    50

    ;; NIL es un Atom y una List, su valor es vaco.

    ;; atoms reservados

    CL-USER 2 > nil

    NIL

    CL-USER 3 > t

    T

    ;; Para evaluar una lista se invoca a una funcin de la forma siguiente:

    ;; (funcin-name arg1 .argn)

    CL-USER 4 > (+ 54 23 12)

    89

    CL-USER 5 > (sqrt n)

    4.358899

    CL-USER 8 : 1 > (- 30 n)

    11

  • CL-USER 10 : 2 > (max -2 4 78 45 34 23 6 12)

    78

    CL-USER 12 : 2 > ( min 5.0 2)

    2

    CL-USER 13 : 2 > (expt 2 3)

    8

    CL-USER 14 : 2 > (expt 16 0.5)

    4.0

    CL-USER 16 : 3 > (expt 16 0.5)

    4.0

    CL-USER 19 : 4 > (expt 16 (/ 1 2))

    4.0

    CL-USER 20 : 4 > (expt 27 (/ 1 3))

    3.0

    CL-USER 11 : 2 > (- 20 (- 5 0))

    15

    CL-USER 13 : 3 > (- 20 -5)

    25

    Ejercicios : Plantear y resolver 20 ejercicios y explicar su significado

    ;; La combinacion de las funciones first y rest

    ; ; el primer numero

    CL-USER 23 : 2 > (first '(7 4 8 9))

    7

  • ; el segundo numero

    CL-USER 24 : 2 > (first (rest '(7 4 8 9)))

    4

    ; El tercer trmino

    CL-USER 26 : 2 > (first (rest (rest '(7 4 8 9))))

    8

    ;; el predicado endp nos informa de si una lista es vaca (esto es, igual a nil):

    CL-USER 28 : 2 > (endp '(2 5 7 9 6))

    NIL

    CL-USER 29 : 2 > (endp '())

    T

    CL-USER 30 : 2 > (endp (rest '(-3)))

    T

    CL-USER 31 : 2 > (endp nil)

    T

    ;; eq returns true if its arguments are the same, identical object; otherwise, returns

    ;; false.

    CL-USER 41 : 7 > (eq 3 4)

    NIL

    CL-USER 42 : 7 > (eq 'a 'a)

    T

    CL-USER 43 : 7 > (eq (cons 'a 'b) (cons 'a 'c))

    NIL

    ;; reverse and nreverse return a new sequence of the same kind as sequence,

    ;; containing the same elements, but in reverse order.

    CL-USER 44 : 7 > (setq str "abc")

  • "abc"

    CL-USER 45 : 7 > (reverse str)

    "cba"

    CL-USER 46 : 7 > (setq a "abc")

    "abc"

    CL-USER 47 : 7 > (reverse a)

    "cba"

    CL-USER 49 : 8 > (setq li '(1 2 4 5 6))

    (1 2 4 5 6)

    CL-USER 50 : 8 > (reverse li)

    (6 5 4 2 1)

    Ejercicios : Plantear y resolver 20 ejercicios y explicar su significado

    ;; Cons: Construye una lista a partir de datos y una cola. Y el valor de la cola significa nada; es decir, NIL CL-USER 14 : 3 > (cons 5 nil)

    (5)

    CL-USER 15 : 3 > (cons 14(cons 7 nil))

    (14 7)

    CL-USER 16 : 3 > (cons 9(cons 11(cons 13 nil)))

    (9 11 13)

    ;; Al usar cons con un Atom que no es reservado producira un error, para que no ;; ocurra esto se tiene que utilizar apstrofes ( ). CL-USER 18 : 4 > (cons 'm nil)

    (M)

    CL-USER 19 : 4 > (cons 'a 'b)

  • (A . B)

    CL-USER 21 : 5 > (cons 'a 'b)

    (A . B)

    CL-USER 22 : 5 > (cons 'a( cons 'b nil))

    (A B)

    CL-USER 23 : 5 > (cons 1 (cons 2 nil))

    (1 2)

    CL-USER 24 : 5 > (cons 'a(cons 'b(cons 'c nil)))

    (A B C)

    CL-USER 25 : 5 > (cons 'x '(y w z o p))

    (X Y W Z O P)

    CL-USER 26 : 5 > (cons 'a '(b c))

    (A B C)

    ;; list y append Son funciones que toman cualquier cantidad de argumentos. En ;; append es necesario que al declarar los argumentos vayan entre parntesis, ;; mientras que en el list solo es necesario cuando algunos de sus argumentos tienen ;; 2 o ms elementos. CL-USER 28 : 5 > (append 'a)

    A

    CL-USER 29 : 5 > (list 'a)

    (A)

    CL-USER 30 : 5 > (append 'a)

    A

    CL-USER 31 : 5 > (list 'm 'n 'o 'p)

    (M N O P)

    CL-USER 32 : 5 > (append '(m) '(n) '(o) '(p))

    (M N O P)

  • CL-USER 35 : 6 > (append '(a b) '(c d))

    (A B C D)

    CL-USER 36 : 6 > (list 'm '(o p q) '(r s t))

    (M (O P Q) (R S T))

    CL-USER 37 : 6 > (append '(m) '(o p q) '(c d))

    (M O P Q C D)

    Ejercicios : Plantear y resolver 20 ejercicios y explicar su significado

    ; Si uno de sus argumentos es una operacin no es necesario usar el apstrofe '

    CL-USER 39 : 6 > (list 'p 'q 1 (sqrt 25) 20)

    (P Q 1 5.0 20)

    CL-USER 1 > (list 'a)

    (A)

    CL-USER 6 : 1 > (list '(a b) '(c d))

    ((A B) (C D))

    CL-USER 7 : 1 > (list 'p 'q 1 (sqrt 25) 20)

    (P Q 1 5.0 20)

    CL-USER 8 : 1 > (setq li '(P Q q 5.0 20))

    (P Q Q 5.0 20)

    CL-USER 9 : 1 > (print Li)

    (P Q Q 5.0 20)

    (P Q Q 5.0 20)

    ;; Last devuelve el ltimo elemento de la lista, si la lista es nil devuelve NIL.

    CL-USER 1 > (last '(1 2 4 5 6 7))

  • (7)

    ;; length Devuelve el nmero de elementos de la lista CL-USER 3 > (length '(m n o p q)) 5 CL-USER 6 > (length '(m (q r))) 2 CL-USER 3 > (length '(m n o p q)) 5 CL-USER 7 > (setq str "abcd") "abcd" CL-USER 8 > (length str) 4 ;; listp devuelve T si el argumento es una lista sino devuelve NIL. CL-USER 10 > (listp `(m n)) T CL-USER 11 > (listp 'a) NIL CL-USER 12 > (listp '(a)) T CL-USER 19 : 2 > (listp (cons 1(cons 2 nil))) T

    Ejercicios : Plantear y resolver 20 ejercicios y explicar su significado

    ;; DEFINIENDO FUNCIONES

    ;; Al igual que otros lenguajes de programacin, en Lisp podemos declarar funciones ;; para modularizar los programas y hacerlos ms legibles en la medida de lo posible, ;; reutilizando as cdigo escrito y separando distintas partes del problema a

    ;; representar en mdulos. Las funciones se definen de la siguiente manera:

    ;; (defun () ) CL-USER 10 : 1 > (defun suma (a b)

    (+ a b))

    SUMA

    CL-USER 11 : 1 > (suma 4 5)

    9

  • ;; condicional

    CL-USER 12 : 1 > (setq a 1)

    1

    CL-USER 13 : 1 > (setq b 1)

    1

    CL-USER 14 : 1 > (if (= a b)(+ a 1) (- a 1))

    2

    ;; La palabra cond ejecuta un flujo de control dependiendo de la condicin si es

    ;; cierta o no. Es algo parecido al switch de C /C++ , Java, C# .NET , etc... Pero con la

    ;; diferencia que en este caso lo que se pone en los case son condiciones lgicas y no

    ;; constantes.

    CL-USER 15 : 1 > (setq n 10)

    10

    CL-USER 16 : 1 > (cond ((< n 6) 'suspenso)

    ((< n 10) 'aprobado)

    ((< n 11) 'notable)

    (t 'sobresaliente))

    NOTABLE

    CL-USER 17 : 1 > (defun calificacion(m)

    ( cond ((< m 6) 'suspenso)

    ((< m 10) 'aprobado)

    ((< m 11) 'notable)

    (t 'sobresaliente)))

  • CALIFICACION

    CL-USER 18 : 1 > (calificacion 12)

    SOBRESALIENTE

    CL-USER 3 : 1 > (defun area(a b)

    (format t "El area del rectangulo es : ")

    (* a b))

    AREA

    CL-USER 4 : 1 > (area 8 9)

    El area del rectangulo es :

    72

    CL-USER 5 : 1 > (defun area(a b)

    (format t "El area del rectangulo es ~a" (* a b)))

    AREA

    CL-USER 6 : 1 > (area 8 9 )

    El area del rectangulo es 72

    NIL

    CL-USER 3 : 1 > (defun area(a b)

    (format t "El area del rectangulo es : ")

    (* a b))

    AREA

    CL-USER 3 > (area 4 6)

    El area del rectangulo es :

    24

    ;; Problema : Se quiere plantear una funcin llamada donde-esta cuando se

    ingrese Madrid, debe decir Espaa,cuando se ingrese roma debe decir Italia,

    cuando se ingrese pars debe decir francia, caso contrario pas desconocido.Utilice

    defun y cond.

  • ;; Problema Se quiere plantear una funcin llamada media que calcule la media de

    dos numeros.Utilice defun .

    ;; Problema Se quiere plantear una funcin llamada suma que calcule la suma de

    dos numeros.Utilice defun .

    ;; Problema Se quiere plantear una funcin llamada suma que calcule el cuadrado

    de cada uno de los elementos de una lista.Utilice defun . Asimismo

    CL-USER 1 > (defun expandir-estado (estado)

    (case estado

    (i '(a b))

    (a '(c d))

    (b '(e f))

    (e '(o))

    (otherwise (list ))))

    EXPANDIR-ESTADO

    CL-USER 6 > (expandir-estado 'i)

    (A B)

    CL-USER 7 > (expandir-estado 'b)

    (E F)

    RECURSIVIDAD

    1_ Obtenga la suma de los n primeros nmeros enteros positivos

    1 Si x=1

    sumapositivos(x)= x + sumapositivos (x-1) Otro caso

    En Lisp:

  • CL-USER 1 > (defun sumapositivos(x) (if (= x 1) 1 (+ x (sumapositivos(- x 1)))))

    SUMAPOSITIVOS

    CL-USER 2 > (sumapositivos 4)

    10

    2. Obtenga el exponente de u n numero dado la base y el exponente a y b de manera

    recursiva

    1 exponente=0

    power(a,b)= base*power(base, exponente-1) otro caso

    3_ Obtener el producto de 2 enteros a y b de manera recursiva

    producto(a,b)= a b=1

    a + producto(a, b-1) otro caso

    3_ Obtener el producto de 2 enteros a y b de manera recursiva

    producto(a,b)= a b=1

    a+producto(a,b-1) otro caso

    4_ Calcule el ensimo numero fibonacci mediante una funcin recursiva

  • 0 si n=1

    fibo(n)= 1 si n=2

    fibo (n-1) + fibo(n-2)

    5. 10_ Calcule el factorial de un numero mediante una funcin recursiva