Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:xyz:tarea1b [2024/04/08 17:18] – [Lenguaje con tipos estáticos] gricci | teaching:cc4101:tareas:xyz:tarea1b [2024/04/30 18:08] (current) – gricci | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tarea 1b (Entrega: | + | ====== Tarea 1b (Entrega: |
==== Lenguaje con tipos estáticos ==== | ==== Lenguaje con tipos estáticos ==== | ||
Line 13: | Line 13: | ||
Recuerden que tienen que seguir la metodología [[https:// | Recuerden que tienen que seguir la metodología [[https:// | ||
</ | </ | ||
+ | |||
+ | **Distribución de Puntaje** | ||
+ | |||
+ | Esta tarea tiene **4 pts** en total, que se dividen de la siguiente manera: | ||
+ | * 3 pts por implementación (subdividido como especifica el enunciado). | ||
+ | * 0.5 pts para testing. | ||
+ | * 0.5 pts para calidad de código. | ||
Deben entregar via U-cursos **un archivo .zip** que contenga los siguientes archivos: '' | Deben entregar via U-cursos **un archivo .zip** que contenga los siguientes archivos: '' | ||
Si lo desea, puede obtener un bonus resolviendo la tercera parte, que es opcional: '' | Si lo desea, puede obtener un bonus resolviendo la tercera parte, que es opcional: '' | ||
+ | |||
+ | **Nota:** Es libre de implementar el intérprete usando sustitución inmediata o diferida (con ambientes), en cuyo caso podría serle útil el archivo {{ : | ||
Deben entregar vía U-Cursos **un único archivo .zip** que contenga todos los archivos de su entrega. | Deben entregar vía U-Cursos **un único archivo .zip** que contenga todos los archivos de su entrega. | ||
<note important> | <note important> | ||
- | * Recuerde incluir tests con cobertura de todos los casos relevantes para todas las funciones que implemente, pues esto se considerará en la evaluación. | + | * Recuerde incluir tests con cobertura de todos los casos relevantes para todas las funciones que implemente |
</ | </ | ||
- | ===== Parte 1. Lenguaje con funciones de primer orden (1.5 ptos.) ===== | + | |
+ | ===== Parte 1. Lenguaje con funciones de primer orden (1.1 ptos.) ===== | ||
En esta parte, vamos a implementar un lenguaje que incluye primitivas útiles (números, booleanos, pares, y operadores simples), identificadores locales ('' | En esta parte, vamos a implementar un lenguaje que incluye primitivas útiles (números, booleanos, pares, y operadores simples), identificadores locales ('' | ||
Line 51: | Line 61: | ||
| {<id> < | | {<id> < | ||
- | < | + | < |
</ | </ | ||
Line 110: | Line 120: | ||
} | } | ||
</ | </ | ||
+ | Además de lo anterior, asumiremos por simplicidad que en los bindings de un mismo '' | ||
+ | <code scheme> | ||
+ | { | ||
+ | {with {{x 2} | ||
+ | {x 4}} | ||
+ | x} | ||
+ | } | ||
+ | </ | ||
* Debe verificar en tiempo de ejecución que los argumentos de los operadores numéricos sean numéricos, que los argumentos de los operadores booleanos sean booleanos, y que los argumentos de los operadores de pares sean pares (En la parte 2 se alineará la verificación dinámica con la verificación estática). | * Debe verificar en tiempo de ejecución que los argumentos de los operadores numéricos sean numéricos, que los argumentos de los operadores booleanos sean booleanos, y que los argumentos de los operadores de pares sean pares (En la parte 2 se alineará la verificación dinámica con la verificación estática). | ||
* Considere que la igualdad solo es válida sobre números. | * Considere que la igualdad solo es válida sobre números. | ||
Line 171: | Line 189: | ||
Teniendo en cuenta todo lo descrito anteriormente, | Teniendo en cuenta todo lo descrito anteriormente, | ||
- | - **[1.0 pts]** '' | + | - **[0.9 pts]** '' |
- **[0.2 pts]** '' | - **[0.2 pts]** '' | ||
- | |||
- | El testing recibe **0.3 pts**. | ||
----- | ----- | ||
- | ===== Parte 2. Verificación estática de tipos (2.5 ptos.) ===== | + | |
+ | ===== Parte 2. Verificación estática de tipos (1.9 ptos.) ===== | ||
En esta parte vamos a extender el lenguaje con anotaciones de tipos y verificación estática de ellos. Las diferencias en la sintaxis del lenguaje respecto de la parte anterior son: | En esta parte vamos a extender el lenguaje con anotaciones de tipos y verificación estática de ellos. Las diferencias en la sintaxis del lenguaje respecto de la parte anterior son: | ||
Line 206: | Line 223: | ||
{+ x y}} | {+ x y}} | ||
} | } | ||
+ | </ | ||
+ | <code scheme> | ||
{ | { | ||
{with {{x 5}} | {with {{x 5}} | ||
Line 212: | Line 230: | ||
{+ x y}} | {+ x y}} | ||
} | } | ||
+ | </ | ||
+ | <code scheme> | ||
{ | { | ||
{define {add-pair {p : {Pair Num Num}} {x : Num}} : {Pair Num Num} | {define {add-pair {p : {Pair Num Num}} {x : Num}} : {Pair Num Num} | ||
Line 218: | Line 237: | ||
{add-pair {cons 1 1} 1} | {add-pair {cons 1 1} 1} | ||
} | } | ||
+ | </ | ||
+ | <code scheme> | ||
{ | { | ||
{define {id {x : Num}} : Num x} | {define {id {x : Num}} : Num x} | ||
{id 5} | {id 5} | ||
} | } | ||
+ | </ | ||
+ | <code scheme> | ||
{ | { | ||
{define {sum {x : Num} {y : Num} {z : Num}} : Num | {define {sum {x : Num} {y : Num} {z : Num}} : Num | ||
Line 233: | Line 254: | ||
{sum x {fst y} {cadr y}} } | {sum x {fst y} {cadr y}} } | ||
} | } | ||
- | |||
</ | </ | ||
Line 252: | Line 272: | ||
Para poder realizar un checkeo de tipos estático, necesitaremos: | Para poder realizar un checkeo de tipos estático, necesitaremos: | ||
- | - **[0.7 pts]** Implementar la función '' | + | - **[0.6 pts]** Implementar la función '' |
- | - **[0.4 pts]** Implementar '' | + | - **[0.4 pts]** Implementar '' |
- **[0.2 pts]** Implementar '' | - **[0.2 pts]** Implementar '' | ||
- | - **[0.1 pts]** Extender la función '' | + | - **[0.1 pts]** Extender la función '' |
- | El testing de esta parte recibe **0.5 pts**. | ||
**Observaciones importantes**: | **Observaciones importantes**: | ||
Line 270: | Line 289: | ||
**Para los errores**: | **Para los errores**: | ||
- | * Los errores de identificadores libres | + | * Los errores de identificadores libres, funciones no definidas |
* Los mensajes de error de tipo detectados estáticamente tienen que seguir el siguiente patrón: | * Los mensajes de error de tipo detectados estáticamente tienen que seguir el siguiente patrón: | ||
<code scheme>" | <code scheme>" | ||
Line 301: | Line 320: | ||
<note important> | <note important> | ||
- | Esta parte es de realización **opcional**. Si la desarrolla correctamente obtendrá un bono de **1 pt** que podrán agregar a la nota de cualquiera de las tareas. | + | Esta parte es de realización **opcional**. Si la desarrolla correctamente obtendrá un bono de **1 pt** que podrán agregar a la nota de cualquiera de las tareas. |
</ | </ | ||
Line 314: | Line 333: | ||
Un contrato corresponde a un predicado, una función que recibe exactamente un argumento y retorna un booleano. Un ejemplo de programa válido puede ser: | Un contrato corresponde a un predicado, una función que recibe exactamente un argumento y retorna un booleano. Un ejemplo de programa válido puede ser: | ||
<code scheme> | <code scheme> | ||
- | {{define {positive {x : Num}} {< 0 x}} | + | {{define {positive {x : Num}} : Bool {< 0 x}} |
| | ||
{- y x}} | {- y x}} | ||
Line 354: | Line 373: | ||
" | " | ||
</ | </ | ||
+ |