Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:2023-1:tarea2:parte3 [2023/05/11 16:22] – etanter | teaching:cc4101:tareas:2023-1:tarea2:parte3 [2023/05/11 16:50] (current) – [Parte 3. Estrategias de evaluación (2 ptos.)] tvallejos | ||
---|---|---|---|
Line 7: | Line 7: | ||
La extensión de SL consiste en agregar // | La extensión de SL consiste en agregar // | ||
<code scheme> | <code scheme> | ||
- | ;; La función | + | ;; Una función de tipo Num -> Num significa |
- | > (run-p-sl '{with {f {fun {Num -> Num} {x} {+ x x}}} | + | > (run-p-sl '{with {f {fun {x : Num} -> Num : {+ x x}}} |
{f {printn 10}}}) | {f {printn 10}}}) | ||
(result 20 ' | (result 20 ' | ||
- | ;; La función | + | ;; Una función |
- | > (run-p-sl '{with {f {fun {{lazy Num} -> Num} {x} {+ x x}}} | + | > (run-p-sl '{with {f {fun {x : {lazy Num}} -> Num : {+ x x}}} |
{f {printn 10}}}) | {f {printn 10}}}) | ||
(result 20 ' | (result 20 ' | ||
- | ;; La función | + | ;; Una función |
- | > (run-p-sl '{with {f {fun {{name Num} -> Num} {x} {+ x x}}} | + | > (run-p-sl '{with {f {fun {x : {name Num}} -> Num : {+ x x}}} |
{f {printn 10}}}) | {f {printn 10}}}) | ||
(result 20 ' | (result 20 ' | ||
;; Otro ejemplo de lazy. Note que efectivamente al evaluarla se comporta correctamente. | ;; Otro ejemplo de lazy. Note que efectivamente al evaluarla se comporta correctamente. | ||
- | > (run-p-sl '{with {f {fun {{lazy Num} -> Num} {x} 1}} | + | > (run-p-sl '{with {f {fun {x : {lazy Num} -> Num : 1}}} |
{f {printn 10}}}) | {f {printn 10}}}) | ||
(result 1 ' | (result 1 ' | ||
Line 41: | Line 41: | ||
| <id> | | <id> | ||
| {<SL> <SL>} | | {<SL> <SL>} | ||
- | | {fun {< | + | | {fun {< |
| {printn <SL>} | | {printn <SL>} | ||
Line 87: | Line 87: | ||
* Una forma de retrasar la evaluación de una expresión '' | * Una forma de retrasar la evaluación de una expresión '' | ||
* Si se requiere una evaluación temprana y el argumento fue declarado lazy o by-name, entonces es necesario ajustarlo para que efectivamente se evalúe en ese punto. | * Si se requiere una evaluación temprana y el argumento fue declarado lazy o by-name, entonces es necesario ajustarlo para que efectivamente se evalúe en ese punto. | ||
- | * Si tanto la función como el argumento calzan en la estrategia, entonces no es necesario | + | * Si tanto la función como el argumento calzan en la estrategia, entonces no hay nada que hacer. |
- | * Recuerde que la diferencia entre lazy y by-name es que la primera evalúa una sola vez la expresión y luego " | + | * Recuerde que la diferencia entre lazy (a.k.a. by-need) |
</ | </ | ||