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:tarea3 [2016/03/20 01:38] fmossoteaching:cc4101:tareas:2015-2:tarea3 [2016/03/20 01:57] – [(1.0)Funciones con n-argumentos] fmosso
Line 95: Line 95:
   - (1.0) Implemente la función ''%%(compile expr)%%'' que dado una expresión con índices De Bruijn genera la lista de instrucciones siguiendo el esquema de compilación descrito anteriormente   - (1.0) Implemente la función ''%%(compile expr)%%'' que dado una expresión con índices De Bruijn genera la lista de instrucciones siguiendo el esquema de compilación descrito anteriormente
 ===== (0.5) Sistemas de Tipos Simple ===== ===== (0.5) Sistemas de Tipos Simple =====
-En la tarea anterior se abordó el chequeo de tipos en el lenguaje de predicados. En esta ocasión extenderemos el chequeo de tipos de una expresión en presencia de funciones de primera clase. +Se implementará el chequeo de tipos de una expresión en presencia de funciones de primera clase. 
-  - Extienda((Tome la función de la tarea anterior como punto de partida)) la función ''%%(typeof expr)%%'' que recibe un nodo del AST y retorna el tipo correspondiente a la expresión o falla con TYPE_ERROR en caso de que la expresión no sea valida por validación de tipos considerando lo siguiente:+  - Implemente la función ''%%(typeof expr)%%'' que recibe un nodo del AST y retorna el tipo correspondiente a la expresión o falla con TYPE_ERROR en caso de que la expresión no sea valida por validación de tipos considerando lo siguiente:
      * Para una función se válida que la expresión del cuerpo tenga el mismo tipo declarado en el retorno de la función. En caso de pasar la validación el tipo resultante es ''%%(TFun targ tbody)%%'', donde ''%%targ%%'' es el tipo del argumento y ''%%tbody%%'' es el tipo de retorno de la función.      * Para una función se válida que la expresión del cuerpo tenga el mismo tipo declarado en el retorno de la función. En caso de pasar la validación el tipo resultante es ''%%(TFun targ tbody)%%'', donde ''%%targ%%'' es el tipo del argumento y ''%%tbody%%'' es el tipo de retorno de la función.
      * Para la aplicación de función se valida que el primer argumento es efectivamente una función y que el tipo del segundo argumento de la aplicación (argumento real) coincide con el tipo del argumento (formal) de la función. En dicho caso la aplicación tiene el tipo del retorno de la función.      * Para la aplicación de función se valida que el primer argumento es efectivamente una función y que el tipo del segundo argumento de la aplicación (argumento real) coincide con el tipo del argumento (formal) de la función. En dicho caso la aplicación tiene el tipo del retorno de la función.
Line 136: Line 136:
 Entienda la función ''%%typeof-with-sub%%'' para que incluya esta relación de subtipos de funciones Entienda la función ''%%typeof-with-sub%%'' para que incluya esta relación de subtipos de funciones
  
 +===== (1.0) Funciones con n-argumentos =====
  
 +Actualmente su lenguaje soporta únicamente funciones con un único argumento. Extienda su lenguaje para que soporte funciones con n-argumentos. La gramática de su lenguaje es 
 +
 +<code scheme>
 +expr::=...
 +         | {fun {<id> : <TYPE>}* : <TYPE> <expr>}
 +         
 +</code>