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
Next revisionBoth sides next 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 10:28] – [(2.0) Programación funcional] etanter
Line 11: Line 11:
  
   - (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 22:
  
 > (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 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>+  - (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>
 > (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 48: Line 49:
   * ''%%{return e}%%'': Instrucción que detiene la ejecución y retorna el valor de la expresión ''e''. En todo programa la última expresión debe ser ''return'', en caso contrario se debe arrojar el error "no return expression found".   * ''%%{return e}%%'': Instrucción que detiene la ejecución y retorna el valor de la expresión ''e''. En todo programa la última expresión debe ser ''return'', en caso contrario se debe arrojar el error "no return expression found".
  
-Considere que los programas tienen una memoria global que es implementada con una tabla de hash donde cada ''id'' se asocia a un valor. Refierase al [[http://docs.racket-lang.org/reference|manual de Racket]] para obtener información acerca de cómo utilizar tablas de hash en Racket. A modo de ejemplo, considere los siguientes programas implementados en nuestro lenguaje imperativo:+Considere que los programas tienen una memoria global mutable que es implementada con una tabla de hash donde cada ''id'' se asocia a un valor. Refierase al [[http://docs.racket-lang.org/reference|manual de Racket]] para obtener información acerca de cómo utilizar tablas de hash en Racket.  
 + 
 +A modo de ejemplo, considere los siguientes programas implementados en nuestro lenguaje imperativo:
  
 <code scheme> <code scheme>