На самом деле lambda
в вашем коде - это параметры получения и их число.Синтаксис для lambda
без параметров отличается:
(let ([f (lambda () 1)]) (f))
=> 1
Выражение lambda
в вопросе является чем-то другим:
(lambda x x)
Он получает переменное число аргументовв виде списка, а затем возвращает их.Вы назвали его f
, и когда он вызывается так:
(f 1 2 3 4)
Все аргументы привязываются к x
, списку и затем к значению x
возвращается:
'(1 2 3 4)
Итак, f
- это не что иное, как функция identity , которая получает несколько аргументов.Возможно, этот ответ прояснит, как различные функции определены на схеме.Для полноты, вот пример lambda
, который получает single аргумент и возвращает его:
(let ([f (lambda (x) x)]) (f 1))
=> 1
Итак, у вас это есть, вот как мы определяем lambda
s, которые получают 0, 1 или много параметров.