Cualquier lenguaje que tiene cierres pueden usarlos para cama elástica, la cual es una técnica para la recursividad refactorización en iteración. Esto puede sacarlo de los problemas de "desbordamiento de pila" que las implementaciones ingenuas de muchos algoritmos se topan.
Un trampolín es una función que "hace rebotar" un cierre hacia atrás hasta su llamador. El cierre captura "el resto del trabajo".
Por ejemplo, en Python se puede definir un acumulador recursiva para sumar los valores de una matriz:
testdata = range(0, 1000)
def accum(items):
if len(items) == 0:
return 0
elif len(items) == 1:
return items[0]
else:
return items[0] + accum(items[1:])
print "will blow up:", accum(testdata)
En mi máquina, esta dados a cabo con un desbordamiento de pila cuando la longitud de los elementos excede 998.
la misma función se puede hacer en un estilo cama elástica mediante cierres:
def accum2(items):
bounced = trampoline(items, 0)
while (callable(bounced)):
bounced = bounced()
return bounced
def trampoline(items, initval):
if len(items) == 0:
return initval
else:
return lambda: trampoline(items[1:], initval+items[0])
mediante la conversión de la recursividad para iteración, no apagar la pila. El cierre tiene la propiedad de capturar el estado del cálculo en sí mismo en lugar de en la pila como lo hace con la recursión.
Esto probablemente debería ser wiki comunitario. – notJim
me he preguntado lo mismo. Esta página: http://php.net/manual/en/functions.anonymous.php tiene un ejemplo, pero se puede reescribir fácilmente sin cierres. – Galen