Ejercicios resueltos scheme

Solo disponible en BuenasTareas
  • Páginas : 5 (1203 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de noviembre de 2010
Leer documento completo
Vista previa del texto
;; 1. Escribe una expresión en Scheme que realice el siguiente cálculo: 2*10^(-5)*(4/3 + (-1/2))

(*(* 2 10e-5) ;; 2*10^(-5)
(+ 4/3 -1/2)) ;; (4/3 + (-1/2))

;; 2. Obtén la lista (a (b (a a) (b b)) (a b)) usando el operador cons y las letras a y b

(cons 'a ;;(a)
(cons (cons 'b ;; (b)
(cons(cons 'a (cons 'a '())) ;; (a a)
(cons (cons 'b(cons 'b'()))'()))) ;; (b b)
(cons (cons 'a(cons 'b ())) '())) ;; (a b)
)

;; 3. Combina las operaciones cons, car y cdr aplicándolas a la lista (a (b (a a) (b b)) (a b))
;; para producir la lista (a (b b) (a b))
(define lista
'(a (b (a a) (b b)) (a b))
)

(cons (car lista) ;; a
(cons (car(cdr(cdr(car(cdr lista)))) ;; (b b)
)
(cdr (cdr lista)) ;; (a b)
)
);; 4. Calcular la expresión (b (a (c) (d)) (a (c) (d))) a partir de la operación cons y las letras a, b, c y d utilizando let o let* para evitar la repetición de subexpresiones.
(let (
(x (cons 'a
(cons (cons 'c '()) ;; (c)
(cons (cons 'd '()) '()
)
)
)
)
( y 'b)
)
(cons y (cons x (cons x '())))
)

;; 5. Obtén las listas de los ejercicios 2 y 4 usando el comando list

;; (a (b (a a) (b b)) (a b))
(list 'a
(list 'b
(list 'a 'a)
(list 'b 'b)
)
(list 'a 'b)
)
;; (b (a (c) (d)) (a (c) (d)))
(list 'b
(list 'a
(list 'c) (list 'd)
)
(list 'a
(list 'c) (list 'd)
)
)

;; 6. Un método más elegante (aunqueposiblemente más ineficiente) de definir cadr es definir un procedimiento que componga dos procedimientos para crear un tercero. Define un procedimiento "componer" de tal forma que (componer f1 f2) es la composición de f1 y f2, supuesto que ambos toman un único argumento. Utiliza "componer" para definir cadr y cddr.
(define (componer f1 f2)
(f1 f2)
)

(define (componercadr lista)(componer car (cdr lista))
)

(define (componercddr lista)
(componer cdr (cdr lista))
)

;; (*) 7. Define un tipo de datos árbol binario describiendo cómo son sus objetos y las operaciones habituales sobre ellos tales como:
;arbol_binario?: (arbol_binario? lista): toma un parámetro y devuelve #t si el parámetro es un árbol binario y #f en otro caso
(define (a_b? arbol)
(if (null?arbol) #t ;; es vacio
(if (not(list? arbol)) #f ;; es una lista
(if (= (length arbol) 1) #t ;; es un elemento
(if (not(= (length arbol) 3)) #f ;; tiene 3 elementos tal que:
(if (and (or (symbol? (car arbol)) (number? (car arbol)))
(a_b? (car(cdr arbol)))
(a_b? (car(cdr(cdr arbol))))) #t #f
))
)
)
)
)
;crear_ab: (crear_ab): devuelve un árbol binario vacío,
(define (crear_ab)
'()
)
;crear_elto_ab: (crear_elto_ab elto): Devuelve un árbol binario con sólo la raiz que es igual a elto.
(define (crear_elto_ab elemento)
(if (not(symbol? elemento)) '()
(cons elemento '())
)
)
;vacio_ab?:que devuelve true si el árbol es vacío y falso en otro caso,(define (esvacio? arbol)
(null? arbol)
)
;fijar_raiz_ab: que toma un valor y un árbol binario como argumentos y devuelve el árbol binario original pero con el valor en su raiz.
(define (fijar_raiz_ab valor arbolb)
(if (and (symbol? valor) (not(list? valor))) (cons valor (cdr arbolb)) arbolb
)
)
;fijar_arbol_izqdo_ab: que toma dos árboles y devuelve un árbol que es igual a su segundoargumento exceptuando que en su árbol izquierdo ahora está el primer argumento.
(define (fijar_arbol_izqdo_ab arbolb_a arbolb_b)
(if (not (and (a_b? arbolb_a) (a_b? arbolb_b))) #f
(list (car arbolb_b) arbolb_a (car(cdr(cdr arbolb_b))))
)
)
;raiz_ab: toma un argumento que es un árbol binario y devuelve su raiz.
(define (raiz_ab arbol)
(car arbol)
)
;numerico_ab?: Toma...
tracking img