73 votes

Qu'est-ce qu'un «thunk», tel qu'il est utilisé dans Scheme ou en général?

Je rencontre le mot «thunk» à de nombreux endroits dans le code et la documentation liés à Scheme et à des territoires similaires. Je suppose que c'est un nom générique pour une procédure, qui a un seul argument formel. Est-ce exact? Si oui, y a-t-il plus? Si non, s'il vous plaît?

Par exemple. dans SRFI 18 , dans la section «Procédures».

89voto

Svante Points 24355

Il est vraiment très simple. Lorsque vous avez quelques calculs, comme l'ajout de 3 à 5, dans votre programme, puis la création d'un thunk de cela signifie pas de calculer directement, mais au lieu de créer une fonction avec des arguments zéro pour le calcul lorsque la valeur réelle est nécessaire.

(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

Dans le second cas, foo serait appelé un thunk.

Paresseux langues brouiller la ligne entre la liaison d'une variable à une valeur et de créer une fonction pour renvoyer la valeur, de sorte que le fait d'écrire quelque chose comme le premier formulaire ci-dessus est effectivement traitée comme la seconde, sous le capot.

46voto

Steven Huwig Points 8029

Un "thunk" est une procédure objet sans arguments formels, par exemple, à partir de votre DDRS lien:

(lambda () (write '(b1))

Le b1 variable est liée dans le bloc enfermant, et cela nous donne un indice quant à l'étymologie du mot "thunk", qui s'appuie sur une blague sur les problèmes de la grammaire anglaise.

Un zéro argument de la fonction n'a aucun moyen de modifier son comportement en fonction des paramètres, il est appelé avec, car il n'a pas de paramètres. Par conséquent, l'ensemble de l'opération de la fonction est définie -- c'est juste en attente d'être exécuté. Pas plus de "pensée" est requise de la part de l'ordinateur, toutes les de la "pensée" a été fait -- l'action est complètement "thunk" à travers.

C'est tout un "thunk" est dans ce DDRS du contexte -- une procédure sans argument.

20voto

kotlinski Points 12815

Wikipedia a la réponse suivante:

En programmation fonctionnelle, "thunk" est un autre nom pour un nullary fonction - une fonction qui ne prend pas d'arguments. Les Thunks sont fréquemment utilisés dans le strict langues comme un moyen de simuler l'évaluation différée; le thunk lui-même les retards le calcul d'une fonction de l'argument, et la fonction des forces de thunk pour obtenir la valeur réelle. Dans ce contexte, un thunk est souvent appelé une suspension ou (dans le Schéma) une promesse.

L'ajout d'une évaluation différée exemple dans le Schéma. Ici, la promesse est un autre mot pour thunk.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X