Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:xyz:2024-1:tarea3 [2024/07/11 01:57] – [Acceso y Modificación a Campos (X pts)] gricci | teaching:cc4101:tareas:xyz:2024-1:tarea3 [2024/07/11 02:24] (current) – [Codificando funciones anónimas de primera clase con Objetos (1 pto)] fdiaz | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Tarea 3 (Entrega: X de julio de 2024) ====== | ====== Tarea 3 (Entrega: X de julio de 2024) ====== | ||
- | Esta tarea se distribuye con un archivo zip ({{ : | + | Esta tarea se distribuye con un archivo zip ({{ : |
Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt. | Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt. | ||
Line 18: | Line 18: | ||
- **Clases y objetos**: En esta sección se pide extender el lenguaje base con clases y objetos. En particular las clases deben ser entidades de primera clase, es decir, son valores del lenguaje. | - **Clases y objetos**: En esta sección se pide extender el lenguaje base con clases y objetos. En particular las clases deben ser entidades de primera clase, es decir, son valores del lenguaje. | ||
- | - **Codificando | + | - **Codificando |
<note warning> | <note warning> | ||
Line 178: | Line 178: | ||
**Intérprete** | **Intérprete** | ||
* [0.3 pts] Extienda el tipo '' | * [0.3 pts] Extienda el tipo '' | ||
- | * [0.4 pts] Defina la función '' | + | * [0.4 pts] Defina la función '' |
* [0.4 pts] Extienda el intérprete para permitir instanciar una clase utilizando la expresión '' | * [0.4 pts] Extienda el intérprete para permitir instanciar una clase utilizando la expresión '' | ||
Line 195: | Line 195: | ||
<code scheme> | <code scheme> | ||
- | ;; Una clase sin constructores puede ser creado solo con {new class}, sin argumentos | + | ;; Esta clase no tienen ningún constructor |
- | > (run-val '{with {{x 10} | + | > (run-val '{begin |
- | | + | |
- | | + | |
- | 1}) | + | |
- | " | + | |
- | </ | + | |
- | + | ||
- | <code scheme> | + | |
- | ;; Una clase sin constructores puede ser creado solo con {new class}, sin argumentos | + | |
- | > (run-val '{with {{x 10} | + | |
- | {A {class {x}}} | + | |
- | | + | |
- | 1}) | + | |
" | " | ||
</ | </ | ||
Line 235: | Line 226: | ||
{-> o m}}) | {-> o m}}) | ||
" | " | ||
+ | </ | ||
+ | |||
+ | <code scheme> | ||
+ | ;; Esta clase no tiene el método set-x definido para la aridad 2 | ||
+ | > (run-val '{with {{A {class {x} | ||
+ | {def set-x {val-x} {set x val-x}}}} | ||
+ | {o {new A}}} | ||
+ | {-> o set-x 10 20}}) | ||
+ | " | ||
</ | </ | ||
Line 282: | Line 282: | ||
</ | </ | ||
- | ===== Codificando | + | ===== Codificando |
- | Ahora incorporaremosmos lambdas (funciones anónimas de primera clase) a nuestro lenguaje. A diferencia de lo visto durante el curso, en esta ocasión no daremos una interpretación directa de las funciones. Usted debe idear una manera de usar la implementación de clases y objetos hecha en la parte anterior para codificar las lambdas. Esto significa que **no puede modificar** el AST y el intérprete para soportar funciones y aplicaciones de funciones. Las modificaciones que debe hacer son en el **parser**. En otras palabras, las funciones y aplicaciones serán sólo azúcar sintáctica. | + | Ahora incorporaremos |
+ | |||
+ | Hint: Piense en lo que comúnmente hemos visto como sintaxis de " | ||
<code scheme> | <code scheme> | ||
< | < |