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:2026-1:tarea2:bonus [2026/05/11 16:15] – [Modificación de la gramática y parser] msegurteaching:cc4101:tareas:2026-1:tarea2:bonus [2026/05/11 17:52] (current) – [Parte BONUS. Modificadores de with (1.0 pto)] Reformulación enunciado bduarte
Line 1: Line 1:
 [[teaching:cc4101:tareas:2026-1:tarea2|<< Volver]] [[teaching:cc4101:tareas:2026-1:tarea2|<< Volver]]
  
-===== Parte BONUS. Casteo de evaluación (0.7 ptos) =====+===== Parte BONUS. Modificadores de with (1.0 pto) =====
  
-En esta parte agregarán el casteo opcional de la forma de evaluación de los binds del ''with'' en SL. La gramática de la parte 3 hace verboso crear funciones (o variables en generalcon modificadores de tiposNótese en el siguiente ejemplo que lo que queremos obtener es una **expresión que se evalúa según call-by-name y que evalúe a una función**:+En el lenguaje SL, el único lugar donde se puede especificar una estrategia de evaluación es en la firma de una función anónima. Como hemos visto, las funciones anónimas también son en esencia la forma de introducir una variable local (recuerde como se puede considerar que ''with'' es azucar sintactico para una aplicación de lambda). En esta parte bonus, se pide extender la sintaxis del ''with'' para que permita especificar la estrategia de evaluación de la expresión nombrada.
  
-<code scheme> +Por ejemplo:
-{with {by-name {fun {f : {Num -> Num}} -> {name {Num -> Num}} : +
-                       f}} +
-         {with {foo {fun {x : Num} -> Num : +
-                         x}} +
-               {by-name foo}}} +
-</code> +
- +
-Modificaremos el 'with' para permitir agregar un modificador de tipo a las expresiones, facilitando el proceso. El siguiente ejemplo será equivalente a lo anterior:+
  
 <code scheme> <code scheme>
-'{with {foo name {fun {x : Num} -> Num : +{with {x : {name Num} {printn 10}} 
-                      x}} +  {+ x x}}
-       foo}+
 </code> </code>
  
-Esto también nos permite crear expresiones simples del lenguaje con diferentes métodos de evaluación:+enlaza ''x'' con la promesa de evaluar ''{printn 10}'' cada vez que sea necesario. En este ejemplo, se debe imprimir ''10'' dos veces, y producir ''20''.
  
-<code scheme> +<note tip>Noten en particular que la sintaxis requiere indicar el tipo completo, esto va a simplificar las cosas</note>
->(run-p-sl '{with {x name {printn 1}} +
-                    {+ x x}}) +
-(result 2 '("1" "1")) +
-</code>+
  
 ==== Modificación de la gramática y parser ===== ==== Modificación de la gramática y parser =====