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:2025-1:tarea2:parte4 [2025/05/11 20:51] msegurteaching:cc4101:tareas:2025-1:tarea2:parte4 [2025/05/28 19:45] (current) – [Parte 4. Estrategias de evaluación parte 2] dibanez
Line 4: Line 4:
  
 ===== Parte 4. Estrategias de evaluación parte 2 ===== ===== Parte 4. Estrategias de evaluación parte 2 =====
 +
 +==== Motivación ====
 +En la parte anterior definimos la función ''compatible?'' tal que solo ignora los modificadores en //top level//, es decir, si al recibir el mtype ignora su modificador, pero los tipos subyacentes los compara por igualdad.
 +
 +Por esto, el siguiente programa es rechazado por ''typecheck'':
 +<code scheme>
 +{with {apply1 {fun {f : {Num -> Num}} -> Num : {f 1}}}
 +      {with {id {fun {x : {lazy Num}} -> Num : x}}
 +            {apply1 id}}}
 +</code>
 +Ya que el tipo ''{lazy Num} -> Num'' no es compatible con ''Num -> Num''. Sin embargo, si suponemos la existencia de una función
 +
 +La implementación de estrategias de evaluación realizada en la parte anterior tiene algunos problemas. En particular, para evitar errores de adaptación, implementamos un chequeo más estricto respecto a los modificadores de tipo en los argumentos/valores de retorno de las funciones. 
 +
 +En esta parte de la tarea, queremos implementar un ajuste de orden superior, que permita compatibilizar los tipos de entrada y salida de las funciones.