Подтвердить что ты не робот

Что такое "удар", как используется в Схеме или вообще?

Я встречаю слово "thunk" во многих местах кода и документации, связанных с Scheme, и схожими территориями. Я предполагаю, что это общее имя для процедуры, которая имеет один формальный аргумент. Это верно? Если да, есть ли еще больше? Если нет, пожалуйста?

Например, в SRFI 18, в разделе "Процедуры".

4b9b3361

Ответ 1

Это действительно просто. Когда у вас есть какие-то вычисления, например добавление от 3 до 5, в вашей программе, то создание этого метода означает не вычислять его напрямую, а вместо этого создавать функцию с нулевыми аргументами, которая будет вычислять ее, когда требуется фактическое значение.

(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

Во втором случае foo будет называться thunk.

Ленивые языки размывают границу между привязкой переменной к значению и созданием функции для возврата этого значения, так что запись чего-то вроде первой формы выше фактически обрабатывается как вторая, под капотом.

Ответ 2

"thunk" - это объект процедуры без формальных аргументов, например. из ссылки SRFI:

(lambda () (write '(b1)))

Переменная b1 связана в охватывающем блоке, и это дает нам ключ к этимологии слова "thunk", который опирается на шутки о плохой грамматике.

Функция с нулевым аргументом не имеет возможности изменить свое поведение на основе параметров, с которыми он вызван, поскольку он не имеет параметров. Поэтому вся операция функции задана - она ​​просто ждет исполнения. Никакой "мысли" не требуется со стороны компьютера, все "мышление" сделано - действие полностью "thunk" через.

Что все "thunk" находится в этом контексте SRFI - процедура без аргументов.

Ответ 3

Wikipedia имеет следующий ответ:

В функциональном программировании "thunk" - это другое имя для нулевой функции - функция, которая не принимает аргументов. Thunks часто используются в строгих языках как средство моделирования ленивой оценки; сам кусок задерживает вычисление аргумента функции, а функция заставляет thunk получать фактическое значение. В этом контексте ханк часто называют приостановкой или (в Схеме) обещанием.

Добавление ленивого примера оценки на Схеме. Здесь обещание - еще одно слово для thunk.