Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision |
teaching:cc4101:tareas:2024-1:tarea2:parte2 [2024/05/09 19:57] – created gricci | teaching:cc4101:tareas:2024-1:tarea2:parte2 [2024/05/21 15:03] (current) – etanter |
---|
| |
**Observaciones**: | **Observaciones**: |
* Los valores que usan como keys en un hash no pueden ser (o contener) valores mutables ((ver [[https://docs.racket-lang.org/reference/hashtables.html#(elem._(caveat._mutable-keys))|documentación]] sobre hash tables y valores mutables.)). Para evitar esto, por ejemplo si usan los valores del lenguaje como llaves, y que estos incluyen clausuras con hash, pueden definir una función para generar una versión immutable de esas clausuras (''%%hash->list%%'' convierte un hash en lista immutable).((ver [[https://docs.racket-lang.org/reference/hashtables.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._hash-~3elist%29%29|documentación]] sobre conversion de hash tables a listas.)) | |
* Cada ''mfun'' tiene su propia memoria. | * Cada ''mfun'' tiene su propia memoria. |
| * Si usan los valores del lenguaje como llaves, se van a encontrar con problemas con el mecanismo de hashing normal dado que los valores son mutables (por las tablas de hash de memoización) ((ver [[https://docs.racket-lang.org/reference/hashtables.html#(elem._(caveat._mutable-keys))|documentación]] sobre hash tables y valores mutables.)). Para resolver este problema, en vez de usar ''make-hash'' para crear sus tablas de hash, tienen que usar ''make-hashalw'': este constructor retorna una tabla que usa ''equal-always?''((ver [[https://docs.racket-lang.org/reference/Equality.html#%28def._%28%28quote._~23~25kernel%29._equal-always~3f%29%29|documentación]] sobre igualdad de estructuras y mutación.)) para comparar llaves y por ende se comporta de manera coherente con llaves mutables. |
| |