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