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 20:25] – Cambiar observaciones por verbos. Instrucciones de implementacion tvallejos | teaching:cc4101:tareas:tarea1xyz [2023/04/05 21:02] (current) – etanter | ||
---|---|---|---|
Line 17: | Line 17: | ||
- | 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 55: | 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 80: | Line 82: | ||
</ | </ | ||
- | Su función '' | + | Su función '' |
* Implemente la función '' | * Implemente la función '' | ||
- | * Implemente la función '' | + | * Implemente la función '' |
- | * Implemente la funcion '' | + | |
**Observaciones importantes**: | **Observaciones importantes**: | ||
Line 104: | 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 111: | Line 112: | ||
;; < | ;; < | ||
- | < | + | < |
- | < | + | < |
< | < | ||
Line 158: | Line 159: | ||
- | En esta parte, deben definir | + | * Defina |
+ | * Extienda | ||
**Observaciones importantes**: | **Observaciones importantes**: | ||
Line 165: | 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 178: | 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 208: | 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 228: | Line 230: | ||
<code scheme> | <code scheme> | ||
{{define {positive {x : Num}} {< 0 x}} | {{define {positive {x : Num}} {< 0 x}} | ||
- | | + | |
| | ||
</ | </ | ||
Line 244: | Line 246: | ||
> (run ' | > (run ' | ||
| | ||
- | #t} | ||
| | ||
" | " | ||
</ | </ |