Both sides previous revisionPrevious revisionNext revision | Previous revision |
teaching:cc4101:tareas:2022-1:tarea1 [2022/04/06 22:38] – [Parte 3. Contratos en funciones de primer orden (1.5 ptos.)] tdiaz | teaching:cc4101:tareas:2022-1:tarea1 [2022/04/19 18:54] (current) – etanter |
---|
</code> | </code> |
| |
En el BNF utilizamos ''[ ]'' para denotar que algo es opcional. Note que ''%%with%%'' no incluye anotación del tipo del cuerpo y que los tipos de los identificadores son opcionales. Igualmente, el tipo de retorno de una función es opcional, pero el de cada argumento **sí** es necesario. | En el BNF utilizamos ''[ ]'' para denotar que algo es opcional. Note que ''%%with%%'' no incluye anotación del tipo del cuerpo y que los tipos de los identificadores son opcionales. Igualmente, el tipo de retorno de una función es opcional, pero el de cada argumento **sí** es necesario. Para funciones recursivas, pueden asumir que el tipo de retorno tiene que ser especificado. |
| |
Los programas siguientes están bien tipados: | Los programas siguientes están bien tipados: |
En esta parte, su función ''run'' debe hacer lo mismo que en la parte 2. Solamente que la interpretación ahora incluye verificar contratos. | En esta parte, su función ''run'' debe hacer lo mismo que en la parte 2. Solamente que la interpretación ahora incluye verificar contratos. |
| |
**Instrucciones**: | **Observaciones importantes**: |
* En el intérprete, cuando se efectúa una aplicación de función, se tiene que verificar que sus argumentos cumplan con los contratos declarados (de existir -- sino, procede como antes). | * En el intérprete, cuando se efectúa una aplicación de función, se tiene que verificar que sus argumentos cumplan con los contratos declarados (de existir -- sino, procede como antes). |
* Cuando el contrato no se cumpla, el patrón de error es: <code scheme> | * Cuando el contrato no se cumpla, el patrón de error es: <code scheme> |
"Runtime contract error: <v> does not satisfy <contract>" | "Runtime contract error: <v> does not satisfy <contract>" |
</code> donde ''<v>'' es el valor al que se le aplicó el contrato <contract> el nombre de este. | </code> donde ''<v>'' es el valor al que se le aplicó el contrato <contract> el nombre de este. |
* Una función usada como contrato *debe* aceptar un solo argumento de cualquier tipo válido y *debe* retornar un valor de tipo ''Bool''. Sino, el patrón de error es : <code scheme> | * Una función usada como contrato **debe** aceptar un solo argumento de cualquier tipo válido y **debe** retornar un valor de tipo ''Bool''. Sino, el patrón de error es : <code scheme> |
"Static contract error: invalid type for <c>" | "Static contract error: invalid type for <c>" |
</code> donde ''<c>'' es el nombre del contrato que no tipa. | </code> donde ''<c>'' es el nombre del contrato que no tipa. |