Ejercicios Scheme 1.El Contador de Átomos Imperial Synopsis

Anuncio
Ejercicios Scheme
1.El Contador de Átomos Imperial
Synopsis: (cuentatom lista)
Descripción: Una lista contiene átomos, y aunque sean dispares (de distinto tipo), son
enumerables.
La idea de un Contador de Átomos es entregar la cantidad de elementos atómicos que contiene
una lista. Sin embargo, la lista puede contener a su vez sublistas, o peor aun listas impropias. Su
misión es escribir la función que cuente los átomos independiente de que lista se le entregue.
Ejemplos:
> (cuentatom ’(1 2 (3 4 5) 6))
6
> (cuentatom ’(1 2 (3 . 4) (5 6 7)))
7
2. Reduccion por ”La Función”
Synopsis: (reduct func lista)
Descripción: La idea es utilizar func como función (binaria) de reducción. Esto significa aplicar a
cada elemento la función dada con el resultado de los elementos anteriores. Para esto se debe
partir del primer elemento con el elemento identidad (hint: pruebe con (func)), este resultado será el
que se aplicara con el segundo elemento de la lista y así.
Ejemplo:
> (reduct + ’(1 2 3 4 5))
15
> (reduct list ’(1 2 3 4 5))
(((((() 1) 2) 3) 4) 5)
2
3. Arbol Binario Estelar en In-Orden
Synopsis: (inorden arbol)
Descripción: Un árbol binario puede ser representado mediante una lista: (valor nodo árbolizquierdo árbol-derecho). Una hoja por lo tanto serıa un nodo con dos hijos nulos: (valor hoja () ()).
La función inorden debe entregar una lista de elementos en inorden (puede revisar sus apuntes de
Estructura de Datos para solucionar este problema).
Ejemplo:
> (inorden ’(a (b (d () ())
(e () ()))
(c (f () ())
(g () ())))
(d b e a f c g)
4. Coeficientes del triangulo de Darth Pascal
Synopsis: (tpascal nivel)
Descripción: Debe entregar cualquier nivel del triangulo de Pascal. Esto quiere decir una lista con
los coeficientes binomiales del grado (nivel) solicitado. Puede usar:
n
k
=
n 1
k 1
+
n 1
k
aunque hay otras formas:
n
k
=
n (n 1) ... (n k 1)
1 2 3... k
o incluso:
n
k
=
n!
k!(n k )!
Ejemplo:
> (tpascal 2)
(1 2 1)
> (tpascal 14)
(1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1)
3
5. Las Listas del Maestro Fibonacci
Synopsis: (lmf n)
Descripción: Las Listas del Maestro Fibonacci se definen como sigue:
L0 = ()
L1 = (a)
L2 = ((a)())
...
Ln = (Ln�1 Ln�2)
Se pide una función que entregue la n-esima lista, función que será necesaria ya que el Maestro
Fibonacci investiga si alguna de estas listas neutraliza al Goto de la Muerte, la mayor de las armas
del Imperio.
Ejemplo:
> (lmf 5)
(((((a) ()) (a)) ((a) ())) (((a) ()) (a)))
6. Transimbolizador Wookie
Synopsis: (tsw rules expr)
Descripción: El transimbolizador debe substituir los símbolos de la lista expr mediante un conjunto
de reglas rules, de la siguiente forma: (origen destino). El conjunto de reglas es una lista a su vez.
Toda esta explicación es confusa, como corresponde a todo lo wookie. Queda mas confuso con los
ejemplos.
Ejemplo:
> (tsw ’((a e) (l t)) ’(l e m a r))
(t e m e r)
> (tsw ’((2 a) (3 b) (b a) (a *)) ’(a 2 b 2 *))
(* * * * *)
Nótese que cada par de la lista de reglas se aplica en secuencia, sobre el resultado anterior.
7. Mapear ”La Funcion” sobre una lista simple
Synopsis: ((mymap func) lista)
Descripción: Se debe implementar una función que retorne una función que mapea la original
sobre la lista argumento, obviamente sin utilizar map.
Ejemplo:
> ((mymap not) ’(#t #f #t #t))
(#f #t #f #f)
> ((mymap (lambda (x) (* x x))) ’(1 2 3 4))
(1 4 9 16)
8. Evaluacion Logica Rebelde
Synopsis: (vfeval expr)
Descripción: Se debe evaluar una expresión lógica pero con los átomos V y F en vez de #t y #f.
Los rebeldes usan los operadores lógicos and, or, xor, y not.
Ejemplo:
> (vfeval ’(and V (or (V F))))
V
> (vfeval ’(or F (and (xor V V) (not F))))
F
9. Infiltracion de Strings en Listas Ordenadas
Synopsis: (insstr str lst)
Descripción: La idea es insertar un string str (un espıa rebelde) en una lista de strings lst (los
esbirros imperiales). La lista de strings es una lista simple, ordenada de menor a mayor.
Ejemplo:
> (insstr "prolog" ’("c" "java" "perl" "scheme"))
("c" "java" "perl" "prolog" "scheme")
10. Sith Horner y su regla para evaluar polinomios
Synopsis: ((horner poly) value)
Descripción: Un polinomio puede ser expresado mediante una lista de números que representan
los coeficientes. Por ejemplo,
por
an x n + an 1 x n 1 + an 2 x n
(a n a n 1 ... a1 a 0 ) . Para 3x 3
2
+ ... + a1 x + a 0 puede ser representado
2 x + 3 podemos escribir (3 0 -2 3). Esta representación nos
ayudara a evaluar cualquier polinomio poly con el valor value. Esta evaluación debe ser realizada
mediante la regla de Horner1. Además, la función que se defina deberá aceptar números
complejos.
Ejemplo:
> ((horner ’(3 0 -2 3)) 2)
23
> (define p (horner ’(2+3i -i 5-2i)))
> (p 2+3i)
-38.0+5.0i
Descargar