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:2017-2:tarea2 [2017/09/19 21:50] – [Presentación del Lenguaje] folmedoteaching:cc4101:tareas:2017-2:tarea2 [2017/10/02 18:41] (current) – [Tareas a realizar] folmedo
Line 10: Line 10:
  
   * donde se puedan definir **tipos inductivos** propios (los únicos valores atómicos del lenguaje van a ser de algún tipo definido por el usuario), y   * donde se puedan definir **tipos inductivos** propios (los únicos valores atómicos del lenguaje van a ser de algún tipo definido por el usuario), y
-  * que soporte funciones de primera clase de **múltiples argumentos** y **anotaciones de tipo**.+  * que soporte funciones de **múltiples argumentos** y **anotaciones de tipo**.
  
  
Line 25: Line 25:
  
 <expr>    ::= <id>    ;identificador <expr>    ::= <id>    ;identificador
-            | (fun (<id> : <type>)+ <expr>   ;función de primera clase+            | (fun (<id> : <type>)+ <expr>   ;función (anónima) de primera clase
             | (match <expr> (<case>+))    ;pattern matching             | (match <expr> (<case>+))    ;pattern matching
             | (<expr> <expr>*)    ;aplicación             | (<expr> <expr>*)    ;aplicación
Line 103: Line 103:
                 (match b                 (match b
                  ((case (t) => (f)))))                  ((case (t) => (f)))))
-       (not {f)))+       (not (f)))
    "match error")    "match error")
 </code> </code>
Line 203: Line 203:
  
 == P3 (2.50 Pt) == == P3 (2.50 Pt) ==
-Defina la función **''%%interp :: Expr x Env -> Val%%''** que evalúa una expresión bajo un régimen de reducción eager, usando los bindings provistos por el entorno. Se requiere que el lenguaje soporte recursión para las funciones de primer orden (es decir, las definidas a través de un ''def''), pero no es necesario que soporte recursión para las funciones de primera clase (es decir, las definidas a través de un ''fun'').+Defina la función **''%%interp :: Expr x Env -> Val%%''** que evalúa una expresión bajo un régimen de reducción eager, usando los bindings provistos por el entorno. Se requiere que el lenguaje soporte recursión para las funciones de primer orden (es decir, las definidas a través de un ''def'').
  
 **Ayuda. ** Piense si el soporte de recursión en las funciones de primer orden requiere algún tratamiento especial o no.  **Ayuda. ** Piense si el soporte de recursión en las funciones de primer orden requiere algún tratamiento especial o no. 
Line 209: Line 209:
 == P4 (1.50 Pt) == == P4 (1.50 Pt) ==
 Defina la función **''%%run :: s-expr -> String%%''** que toma un programa fuente y retorna la representación en String del valor resultante de la interpretación con su tipo anotado. Informalmente, los principales pasos de la  función ''run'' serán los siguientes: Defina la función **''%%run :: s-expr -> String%%''** que toma un programa fuente y retorna la representación en String del valor resultante de la interpretación con su tipo anotado. Informalmente, los principales pasos de la  función ''run'' serán los siguientes:
-  * Construir un entorno inicial que contenga los bindings correspondientes para cada constructor de los tipos inductivos que se hayan definidos (a través de un ''deftype'') y de las funciones que se hayan definido (a través de un ''def''). Piense bien qué información necesita almacenar en el entorno para cada uno de ellos. +  * Construir un entorno inicial que contenga los bindings correspondientes para cada constructor de los tipos inductivos que se hayan definido (a través de un ''deftype'') y de las funciones que se hayan definido (a través de un ''def''). Piense bien qué información necesita almacenar en el entorno para cada uno de ellos. 
   * Evaluar la expresión "principal" del programa en ese entorno inicial (recuerde que un programa es una lista de definiciones seguida de una expresión "principal").   * Evaluar la expresión "principal" del programa en ese entorno inicial (recuerde que un programa es una lista de definiciones seguida de una expresión "principal").
   * Transformar el resultado de esa evaluación en un String, como se muestra en los ejemplos.   * Transformar el resultado de esa evaluación en un String, como se muestra en los ejemplos.