laboratorio
DESCRIPTION
ejerciciosTRANSCRIPT
-
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