Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:tarea1xyz [2023/04/03 15:57] – [Parte 3. Contratos en funciones de primer orden (1.5 ptos.)] rodrigo.urrea | teaching:cc4101:tareas:tarea1xyz [2023/04/05 21:02] (current) – etanter | ||
---|---|---|---|
Line 11: | Line 11: | ||
- | <note important> | + | <note important> |
+ | Consulte las normas de entrega de tareas en http:// | ||
Recuerden que tienen que seguir la metodología [[https:// | Recuerden que tienen que seguir la metodología [[https:// | ||
</ | </ | ||
- | 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: '' |
Line 29: | Line 30: | ||
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 ('' | ||
- | Aquí está la gramática BNF del lenguaje: | + | La gramática BNF del lenguaje |
<code scheme> | <code scheme> | ||
< | < | ||
Line 39: | Line 40: | ||
| < | | < | ||
| {cons < | | {cons < | ||
+ | | {add1 < | ||
| {+ < | | {+ < | ||
| {< < | | {< < | ||
| {= < | | {= < | ||
+ | | {! < | ||
+ | | {&& < | ||
+ | | {|| < | ||
| {fst < | | {fst < | ||
| {snd < | | {snd < | ||
Line 50: | Line 55: | ||
</ | </ | ||
Un programa está compuesto de 0 o más definiciones de funciones, además de una expresión final que sirve de punto de entrada (como el //main// en C y Java). Una definición de función incluye el nombre de la función, el nombre de los parámetros formales, y finalmente la expresión del cuerpo de la función. Las expresiones '' | Un programa está compuesto de 0 o más definiciones de funciones, además de una expresión final que sirve de punto de entrada (como el //main// en C y Java). Una definición de función incluye el nombre de la función, el nombre de los parámetros formales, y finalmente la expresión del cuerpo de la función. Las expresiones '' | ||
+ | |||
+ | Los programas que terminan reducen a valores. Estos pueden ser números, booleanos o pares de valores. Siguiendo buenas prácticas, definimos un tipo de dato inductivo '' | ||
Algunos ejemplos de programas válidos para este lenguaje pueden ser: | Algunos ejemplos de programas válidos para este lenguaje pueden ser: | ||
Line 75: | Line 82: | ||
</ | </ | ||
- | En esta parte, su función '' | + | Su función '' |
+ | |||
+ | * Implemente la función '' | ||
+ | * Implemente la función '' | ||
**Observaciones importantes**: | **Observaciones importantes**: | ||
* Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | ||
- | * Para implementar el lenguaje, | + | * Al implementar el lenguaje, |
- | * La semántica debe considerar | + | * La semántica debe considerar |
- | * Tienen que verificar | + | * Verifique en tiempo de ejecución |
* Considere que la igualdad solo es válida sobre números. | * Considere que la igualdad solo es válida sobre números. | ||
- | * La condición de '' | + | * La condición de una expresión |
* En caso de programas con errores dinámicos, su intérprete tiene que reportarlos explícitamente. Por ejemplo: | * En caso de programas con errores dinámicos, su intérprete tiene que reportarlos explícitamente. Por ejemplo: | ||
<code scheme> | <code scheme> | ||
- | debe caerse | + | debe fallar |
<code scheme>" | <code scheme>" | ||
- | Recuerde que puede testear estos errores | + | Recuerde que puede verificar si un test lanza una excepción |
Line 95: | Line 105: | ||
===== Parte 2. Verificación estática de tipos (2.5 ptos.) ===== | ===== Parte 2. Verificación estática de tipos (2.5 ptos.) ===== | ||
En esta parte vamos a extender el lenguaje de la Parte 1 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 de la Parte 1 con anotaciones de tipos y verificación estática de ellos. Las diferencias en la sintaxis del lenguaje respecto de la parte anterior son: | ||
- | * las declaraciones de función incluyen anotaciones de tipos en cada uno de sus argumentos y también para el tipo de retorno | + | * Las declaraciones de función incluyen anotaciones de tipos en cada uno de sus argumentos y también para el tipo de retorno. |
- | * las expresiones '' | + | * Las expresiones '' |
La nueva sintaxis es la siguiente: | La nueva sintaxis es la siguiente: | ||
Line 102: | Line 112: | ||
;; < | ;; < | ||
- | < | + | < |
- | < | + | < |
< | < | ||
Line 149: | Line 159: | ||
- | En esta parte, deben definir | + | * Defina |
+ | * Extienda | ||
**Observaciones importantes**: | **Observaciones importantes**: | ||
Line 156: | Line 167: | ||
* Para una definición de función, se valida que la expresión del cuerpo tenga el mismo tipo que el tipo de retorno declarado, suponiendo que cada argumento tiene el tipo declarado. Si el tipo de retorno no se especifica, entonces se usa el tipo del cuerpo. | * Para una definición de función, se valida que la expresión del cuerpo tenga el mismo tipo que el tipo de retorno declarado, suponiendo que cada argumento tiene el tipo declarado. Si el tipo de retorno no se especifica, entonces se usa el tipo del cuerpo. | ||
* Debe definir los tipos de los operadores primitivos de manera exacta, p.ej. '' | * Debe definir los tipos de los operadores primitivos de manera exacta, p.ej. '' | ||
- | * Para '' | + | * Considere que la igualdad ('' |
* Para una expresión '' | * Para una expresión '' | ||
* Para '' | * Para '' | ||
- | * En la aplicación de función se valida que el número de argumentos coincide, y que el tipo de los argumentos coincide con los tipos esperados de la función aplicada. | + | * En la aplicación de función se valida que el número de argumentos coincide, y que el tipo de los argumentos coincide con los tipos esperados de la función aplicada. |
Para los errores: | Para los errores: | ||
- | * Los errores de identificadores libres (o funciones no definidas) | + | * Los errores de identificadores libres (o funciones no definidas). Este error debe detectarse |
* 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 169: | Line 180: | ||
< | < | ||
> (typecheck '{3}) | > (typecheck '{3}) | ||
- | (Num) </ | + | (numT) </ |
> (typecheck ' | > (typecheck ' | ||
{f {< 3 4}}}) | {f {< 3 4}}}) | ||
- | (Num) </ | + | (numT) </ |
> (typecheck ' | > (typecheck ' | ||
{one #t}}) | {one #t}}) | ||
Line 199: | Line 210: | ||
{{define {positive {x : Num}} {< 0 x}} | {{define {positive {x : Num}} {< 0 x}} | ||
| | ||
- | {+ y -x}} | + | |
{sub 5 3}} | {sub 5 3}} | ||
</ | </ | ||
- | Donde el '' | + | Donde el argumento |
- | En esta parte, | + | * Extienda nuevamente |
**Observaciones importantes**: | **Observaciones importantes**: | ||
- | * En el intérprete, | + | * En el intérprete, |
- | * Cuando el contrato no se cumpla, el patrón | + | * Cuando el contrato no se cumpla, |
" | " | ||
</ | </ | ||
- | * Una función usada como contrato **debe** aceptar un solo argumento de cualquier tipo válido y **debe** retornar un valor de tipo '' | + | * Una función usada como contrato **debe** aceptar un solo argumento de cualquier tipo válido y **debe** retornar un valor de tipo '' |
" | " | ||
</ | </ | ||
Line 219: | Line 230: | ||
<code scheme> | <code scheme> | ||
{{define {positive {x : Num}} {< 0 x}} | {{define {positive {x : Num}} {< 0 x}} | ||
- | | + | |
| | ||
</ | </ | ||
Line 228: | Line 239: | ||
{+ {pair-div {cons 30 5}} {pair-div {cons 60 0}}} | {+ {pair-div {cons 30 5}} {pair-div {cons 60 0}}} | ||
} | } | ||
+ | " | ||
</ | </ | ||
Line 234: | Line 246: | ||
> (run ' | > (run ' | ||
| | ||
- | #t} | ||
| | ||
" | " | ||
</ | </ |