Está en la página 1de 4

Resolución de Ejercicios de la Práctica de Laboratorio 2

Grupo 8 - 2014 - 1

Para los ejercicios se planteó la Lista siguiente: f '( 1 (2 (3 4)) 5 6 (7 (8 9)))


Para la obtención de los ejercicios 1 y 2, se estableció las funciones siguientes:
Código LISP Operación
defun maxi(l num) (if(not(eq (car l) nil))
(if(atom (car l) ) (if(> (car l) num) (progn
"Maximo elemento de una lista"
(setq num (car l)) (maxi (cdr l) num))
(maxi (cdr l) num) ) (maxi (cdr l) num) )
num)
defun mini(l num) (if(not(eq (car l) nil))
(if(atom (car l) ) (if(< (car l) num) (progn "Minimo elemento de una lista"
(setq num (car l)) (mini (cdr l) num)) (mini
(cdr l) num) ) (mini (cdr l) num) ) num)
defun suma(l) (cond ( (null l) 0) (t (+ (car l) "Suma de una lista de atomos"
(suma (cdr l)))))
defun promedio(l)(/ (suma l) (length l)) "Promedio de una lista de atomos"
defun hojas(l)(cond ((null l) ()) ((atom (car
"Devuelve las hojas"
l)) (cons (car l) (hojas (cdr l)))) (t (hojas
(cdr l))) )
defun subl(l)(cond ((null l) ()) ((listp (car
"Devuelve las sublistas"
l)) (cons (car l) (subl (cdr l)))) (t (subl (cdr
l))) )
defun pares(l)(cond ((null l) ()) ((evenp
"Elementos pares de una sublista"
(car l)) (cons (car l) (pares (cdr l)))) (t
(pares (cdr l))) )
defun aplanar(l) (cond ((null l) ()) ((listp
"Aplanar las sublistas divididas"
(car l)) (append (list (cons (caar l) (cadar
l))) (aplanar (cdr l)))) (t (aplanar (cdr l))))
(defun aplana (lista) (cond ((null lista) NIL)
((atom (car lista)) (cons (car lista) (aplana "Aplanar las sublistas unidas"
cdr lista)))) (t (append (aplana (car lista))
(aplana (cdr lista))))))
setq f '( 1 (2 (3 4)) 5 6 (7 (8 9))) Esta le i ie to de la Lista F

 Ejercicio 1 – (6 (3 8) 1) – (Maxh (Lista de Promedio de Pares de las SubListas) Minh)


defun main1 (l) (append (list (maxi (hojas l) -99)) (list (cons (promedio (pares
(car (aplanar f)))) (list (promedio(pares(cadr (aplanar f))))))) (list (mini (hojas f)
99)))

 Ejercicio 2 – ((9 2) 6) – ((MaxSL MinSL) PromParesHojas)

defun main2 (l) (append (list (list (maxi (aplana (subl l)) -99) (mini (aplana (subl
l)) 99))) (list (maxi(hojas l) -99)))
 Ejercicio 3 – ((19/3 14/3) 12) – ((PromImpSL PromParesSL) SumatoriaHojas)

Código LISP Operación


setq f '(1 (2 (3 4)) 5 6 (7 (8 9))) Establecer lista F
defun obtenerhojas (l) (if (null l) nil ( if
(atom (car l)) (cons (car l) (obtenerhojas Obtener hojas
(cdr l))) (obtenerhojas (cdr l))))
defun suma (l) (cond ((null l) 0) (t (+ (car l)
“u ar hojas
(suma (cdr l)))))
defun subl(l)(cond ((null l) ()) ((listp (car
l)) (cons (car l) (subl (cdr l)))) (t (subl (cdr O te er todas las su listas
l))))
(defun aplana (lista) (cond ((null lista) NIL)
((atom (first lista)) (cons (first lista)
Apla ar listas
(aplana (rest lista))))(t (append (aplana
(first lista)) (aplana (rest lista))))))
defun impares(l)(cond ((null l) ()) ((oddp
(car l)) (cons (car l) (impares (cdr l)))) (t O te er i pares de u a lista
(impares (cdr l))))
defun pares(l)(cond ((null l) ()) ((evenp
(car l)) (cons (car l) (pares (cdr l)))) (t O te er pares de u a lista
(pares (cdr l))))
defun prom (l) (/ (suma l) (length l)) O te er pro edio de u a lista
defun principal(a)(list (list (prom (impares
(aplana (subl a)))) (prom (pares (aplana Fu ió pri ipal
(subl a))))) (suma (obtenerhojas a)))

 Ejercicio 4 – (5 19/3) - (PromParesL PromImparesSL)

Código LISP Operación


setq f '(1 (2 (3 4)) 5 6 (7 (8 9))) Esta le er la Lista
(defun aplana (lista) (cond ((null lista) NIL)
((atom (first lista)) (cons (first lista)
Apla ar la lista
(aplana (rest lista))))(t (append (aplana
(first lista)) (aplana (rest lista))))))
defun impares(l)(cond ((null l) ()) ((oddp
(car l)) (cons (car l) (impares (cdr l)))) (t O te er i pares
(impares (cdr l))))
defun pares(l)(cond ((null l) ()) ((evenp
O te er pares
(car l)) (cons (car l) (pares (cdr l)))) (t
(pares (cdr l))))
defun prom (l) (/ (suma l) (length l)) O te er pro edio
defun suma (l) (cond ((null l) 0) (t (+ (car l)
O te er su a
(suma (cdr l)))))
defun subl(l)(cond ((null l) ()) ((listp (car
l)) (cons (car l) (subl (cdr l)))) (t (subl (cdr O te er todas las su listas
l))))
defun principal (l) (list (prom (pares
(aplana f))) (prom (impares (aplana (subl Fu ió pri ipal
f)))))

 Ejercicio 5 – (9 1) – (MaxL MinL)

Código LISP Operación


setq f '(1 (2 (3 4)) 5 6 (7 (8 9))) Esta le er la Lista
(defun aplana (lista) (cond ((null lista) NIL)
((atom (first lista)) (cons (first lista)
Apla ar la lista
(aplana (rest lista))))(t (append (aplana
(first lista)) (aplana (rest lista))))))
defun mayorhoja(l)(car (last (sort l #'<))) O te er ayor hoja de u a lista
defun menorhoja(l)(car (sort l #'<)) O te er e or hoja de u a lista
defun principal (l) (list (mayorhoja (aplana
Fu ió pri ipal
f)) (menorhoja (aplana f)))
 Ejercicio 6 – ((2 3 4) (7 8 9) (1 5 6))

Código LISP Operación


setq f '(1 (2 (3 4)) 5 6 (7 (8 9))) Esta le er la Lista
(defun aplana (lista) (cond ((null lista) NIL)
((atom (first lista)) (cons (first lista)
Apla ar la lista
(aplana (rest lista))))(t (append (aplana
(first lista)) (aplana (rest lista))))))
defun obtenersublistas (l) (if (null l) nil ( if
(listp (car l)) (cons (aplana (car l))
O te er su listas
(obtenersublistas (cdr l)))
(obtenersublistas (cdr l))))
defun obtenerhojas (l) (if (null l) nil ( if
(atom (car l)) (cons (car l) (obtenerhojas O te er hojas
(cdr l))) (obtenerhojas (cdr l))))
defun principal (l) (append
Fu ió pri ipal
(obtenersublistas l) (list (obtenerhojas l)))

También podría gustarte