Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:cc4101:tareas:2015-2:tarea1 [2015/09/17 10:15] – [(4.0) Lenguaje Imperativo] etanterteaching:cc4101:tareas:2015-2:tarea1 [2015/09/17 11:23] (current) – [(4.0) Lenguaje Imperativo] flarenas
Line 7: Line 7:
   - (0.5) Implemente la función ''%%(repeat lst k)%%'' que repite los elementos de una lista k veces usando ''%%foldr%%'', ''%%map%%'' y la función ''%%range%%'' vista en la Auxiliar 1. Ejemplo: <code scheme>   - (0.5) Implemente la función ''%%(repeat lst k)%%'' que repite los elementos de una lista k veces usando ''%%foldr%%'', ''%%map%%'' y la función ''%%range%%'' vista en la Auxiliar 1. Ejemplo: <code scheme>
 > (repeat '(a b c) 3)                        > (repeat '(a b c) 3)                       
-'(a a a b b b c c cT)+'(a a a b b b c c c)
 </code> </code>
- 
   - (0.7) Defina una función ''%%(groupby selector lst)%%'' que permita agrupar los elementos de una lista basado en un criterio de selección. Ejemplos: <code scheme>   - (0.7) Defina una función ''%%(groupby selector lst)%%'' que permita agrupar los elementos de una lista basado en un criterio de selección. Ejemplos: <code scheme>
-> (groupby cdr (list '("Scorsese" . 72 ) +> (groupby cdr  
-                     '("Tarantino" . 53) +           '(("Scorsese" . 72 )  
-                     '("John" . 19) +             ("Tarantino" . 53) 
-                     '("Peter" . 72) +             ("John" . 19) 
-                     '("Robert" . 19)))                   +             ("Peter" . 72) 
 +             ("Robert" . 19)))                   
 '((72 ("Scorsese" . 72) ("Peter" . 72)) '((72 ("Scorsese" . 72) ("Peter" . 72))
   (53 ("Tarantino" . 53))   (53 ("Tarantino" . 53))
Line 21: Line 21:
  
 > (groupby (λ (x) (modulo (string->number x) 3)) > (groupby (λ (x) (modulo (string->number x) 3))
-           (list "21" "5" "34" "5" "89" "47" "28"))                    +           '("21" "5" "34" "5" "89" "47" "28"))                    
 '((0 "21") (2 "5" "5" "89" "47") (1 "34" "28")) '((0 "21") (2 "5" "5" "89" "47") (1 "34" "28"))
 </code> </code>
- +  - (0.8) Utilizando la función ''%%(apply fun args)%%''  de Racket,  implemente la función ''%%(curry-n f)%%'' que dado una función ''f'' retorna su versión currificada. Para determinar la cantidad de parámetros que espera la función ''%%f%%'', utilice la función ''%%procedure-arity%%'' provista en Racket (puede asumir que la función ''%%f%%'' recibe un número fijo de parámetros). Ejemplos: <code scheme>
-  - (0.8) Utilizando la función ''%%(apply fun args)%%''  de Racket,  implemente la función ''%%(curry-n f)%%'' que dado una función ''f'' retorna su versión currificada. Para obtener la cantidad de parámetros que recibe la función ''%%f%%'', utilice la función ''%%procedure-arity%%'' provista en Racket. Asuma que la función ''%%f%%'' recibe un número fijo de parámetros. Ejemplos: <code scheme>+
 > (define f (curry-n (λ (x y z) (+ x y z))))                                                   > (define f (curry-n (λ (x y z) (+ x y z))))                                                  
 > (((f 2) 5) 20) > (((f 2) 5) 20)
Line 67: Line 66:
 3628800 3628800
 </code> </code>
-  (0.5) Defina la gramática BNF del lenguaje, realizando una clara distinción entre programas (''Prog''), instrucciones (''Instr'') y expresiones (''Expr''). Considere las siguientes operaciones aritméticas: + - *. +  (0.5) Defina la gramática BNF del lenguaje, realizando una clara distinción entre programas (''Prog''), instrucciones (''Instr'') y expresiones (''Expr''). Considere las siguientes operaciones aritméticas: + - *. 
-  (0.5) Defina (usando ''deftype'') las estructuras de datos necesarias para poder construir una representación de la sintaxis abstracta de un programa. +  (0.5) Defina (usando ''deftype'') las estructuras de datos necesarias para poder construir una representación de la sintaxis abstracta de un programa. 
-  (0.5) Defina un parser para el lenguaje. +  (0.5) Defina un parser para el lenguaje. 
-  (1.0) Defina un interprete para el lenguaje, usando una tabla de hash global para manejar el estado de las variables.  +  (1.0) Defina un interprete para el lenguaje, usando una tabla de hash global para manejar el estado de las variables.  
-  (0.5) Defina la función ''run :: Prog → Num'' que ejecuta un programa y retorna el valor de una expresión ''return'', o un error si corresponde. +  (0.5) Defina la función ''run :: Prog → Num'' que ejecuta un programa y retorna el valor de una expresión ''return'', o un error si corresponde. 
-  (1.0) Para evitar errores de variables ya definidas y/o no definidas, defina una función ''var-check :: Prog → List[string]'' que analiza el programa (sin ejecutarlo!), y retorna una lista de los errores de variables presentes en el programa. Si el programa no contiene errores, retorna la lista vacía. +  (1.0) Para evitar errores de variables ya definidas y/o no definidas, defina una función ''var-check :: Prog → List[string]'' que analiza un programa (sin ejecutarlo!), y retorna una lista de los errores de variables presentes en el programa. Si el programa no contiene errores, retorna la lista vacía. 
-//Nota: recuerden que para definir una función que procesa una estructura compuesta, tienen que usar funciones auxiliares para los sub-componentes (aquí, programas, instrucciones, expresiones).//+//Nota: recuerden que para definir una función que procesa una estructura compuesta, tienen que usar funciones auxiliares para los sub-componentes (en el contexto de la tarea: programas, instrucciones, expresiones).//