programming languages - que - ¿Qué es un ''thunk'', como se usa en Scheme o en general?
scheme programing language (3)
Es realmente simple. Cuando tiene algún cálculo, como agregar 3 a 5, en su programa, crear un segundo significa no calcularlo directamente, sino crear una función con cero argumentos que lo calculará cuando se necesite el valor real.
(let ((foo (+ 3 5))) ; the calculation is performed directly, foo is 8
;; some other things
(display foo)) ; foo is evaluated to 8 and printed
(let ((foo (lambda () (+ 3 5)))) ; the calculation is delayed, foo is a
; function that will perform it when needed
;; some other things
(display (foo))) ; foo is evaluated as a function, returns 8 which is printed
En el segundo caso, foo
se llamaría un thunk.
Los lenguajes vagos difuminan la línea entre vincular una variable a un valor y crear una función para devolver ese valor, de modo que escribir algo como la primera forma anterior se trata en realidad como el segundo, debajo del capó.
Me encuentro con la palabra ''thunk'' en muchos lugares en código y documentación relacionada con Scheme y territorios similares. Supongo que es un nombre genérico para un procedimiento, que tiene un único argumento formal. ¿Es eso correcto? Si es así, ¿hay algo más? Si no, por favor?
Por ej. en SRFI 18 , en la sección ''Procedimientos''.
Un "thunk" es un objeto de procedimiento sin argumentos formales, por ejemplo, desde su enlace SRFI:
(lambda () (write ''(b1)))
La variable b1 está vinculada en el bloque adjunto, y esto nos da una pista sobre la etimología de la palabra "thunk", que se basa en una broma sobre la gramática deficiente.
Una función de argumento cero no tiene forma de cambiar su comportamiento en función de los parámetros con los que se llama, ya que no tiene parámetros. Por lo tanto, toda la operación de la función está configurada; solo está esperando ser ejecutada. No se requiere más "pensamiento" por parte de la computadora, todo el "pensamiento" se ha realizado, la acción es completamente "original".
Eso es todo un "thunk" en el contexto de este SRFI, un procedimiento sin argumentos.
Wikipedia tiene la siguiente respuesta:
En la programación funcional, "thunk" es otro nombre para una función nullary, una función que no toma argumentos. Los thunks se utilizan con frecuencia en lenguajes estrictos como un medio para simular una evaluación perezosa; el procesador en sí mismo demora el cálculo del argumento de una función, y la función fuerza al procesador a obtener el valor real. En este contexto, un thunk a menudo se llama suspensión o (en Scheme) una promesa.
Agregar un ejemplo de evaluación diferida en Scheme . Aquí, la promesa es otra palabra para thunk.