Você está na página 1de 12

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 15 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 15 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 15 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 15 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 <name> <documentation-string>(<arguments>) <body>)

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)
(t

'notable)

'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

sumapositivos(x)=

En Lisp:

Si x=1

x + sumapositivos (x-1)

Otro caso

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
power(a,b)=

exponente=0

base*power(base, exponente-1)

otro caso

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


producto(a,b)=

a
a + producto(a, b-1)

b=1
otro caso

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


producto(a,b)=

b=1

a+producto(a,b-1)

otro caso

4_ Calcule el ensimo numero fibonacci mediante una funcin recursiva

fibo(n)=

0
si n=1
1
si n=2
fibo (n-1) + fibo(n-2)

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

Você também pode gostar