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

;; 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)

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

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 25 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)))

; El tercer trmino

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

;; 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 '())

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

CL-USER 31 : 2 > (endp nil)

;; 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)

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 25 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)

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

(A)

CL-USER 30 : 5 > (append '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 25 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 25 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)

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

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

;; 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

Você também pode gostar