Это действительно просто. Если у вас есть какое-то вычисление, например, добавление 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.
Ленивые языки стирают грань между привязкой переменной к значению и созданием функции, которая возвращает это значение, так что написание чего-то вроде первой формы выше фактически обрабатывается как вторая, скрытая под капотом.