Для приведенного ниже кода я не могу понять, как происходят привязки (x, y, z).Пожалуйста, ознакомьтесь с кодом, я объясню мою проблему более подробно ниже:
(define (w x)
(lambda (y z)
(begin
(set! x (+ (* y x) z)) x)))
(define f1 (w 3))
(f1 4 2)
(f1 2 1)
Вывод 14, 29. Это значения для х.
Это означает, изначально, х= 3, y = 4, z = 2.Во втором вызове, т. Е. (F1 2 1), x = 14, y = 2, z = 1.
Мои сомнения:
Как сначала происходит связывание, почему x= 3, y = 4 и z = 2?Если это имеет отношение к лямбда-выражению в функции, пожалуйста, опишите подробно, как оно работает. У меня такое чувство, что мое понимание нарушается.
Далее, почему первоначальный ответ x =14 сохраняется во втором вызове, т.е. (f1 2 1)?
Спасибо, что заглянули в это:)