En SML, la siguiente es posible para el modelado de la programación perezoso,tipos de datos perezosos en Objective C
// Have a datatype to wrap a computation
datatype 'a susp = Susp of (unit -> 'a)
// A function to hold the computation
fun delay(f) = Susp(f)
Sé que los cierres se pueden escribir con Blocks,
int multiplier = 7;
int (^myBlock)(int) = ^(int num) {
return num * multiplier;
};
así que creo que puedo usar como un argumento de función. El siguiente paso sería cómo usar funciones sin argumentos reales (unit value, por ejemplo, en SML fn() =>
) y crear tipos de datos perezosos como el anterior.
¿Es esto posible o debería seguir una forma más obvia?
El objetivo final sería para emular el comportamiento de cálculo suspendido del SML,
let val x = Susp(fn() => horribleComp(345))
in
force(x) + force(x)
end
donde la fuerza (x) es
fun force (Susp(f)) = f()
Gracias, no sabía si podrías haber usado bloques y typedef así. Trataré de la última manera primero y si es necesario, trabajaré con la plantilla para artículos posteriores. – phwd