2011-05-28 11 views
5

Entiendo por este blog post cómo se ha modificado una sola shift dentro de un reset.¿Cómo se reifica en Scala un restablecimiento con dos turnos?

reset { 1 + shift {k:Int => Int => k(5)} + 1}

está solo materializó a

val reified = {shiftValue:Int => 1 + shiftValue + 1}; reified (5)

Ahora tengo otro ejemplo:

reset { 
    1 + shift(k1:Int => Int => k1(5)} + 1; 
    2 + shift(k2:Int => Int => k2(6)} + 2 
}

Se cosifica a:

val reified ={shifyValue1:Int => 
    1 + shiftValue + 1; 
    2 + shift(k2:Int => Int => k2(6)} + 2 
} 
reified(5)

Como puedo materializar aún más para conseguir deshacerse de la 2nd shift?

Respuesta

4
val reified ={shiftValue1:Int => 
    1 + shiftValue + 1; 
    val reified2 = {shiftValue2: Int => 2 + shiftValue + 2}; 
    reified2(6) 
} 
reified(5) 

Básicamente la misma transformación.

(scala no se ha instalado aquí, así que solo probé esta transformación en Scheme, que debería comportarse igual, ignorando cualquier tipo de problema de sistema)

Cuestiones relacionadas