Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
teaching:cc4101:tareas:2025-1:tarea2:parte4 [2025/05/13 03:33] – [Parte 4. Estrategias de evaluación parte 2] 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.  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.  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.