Предположим, что у нас есть символ со значением символа и значением функции и списком свойств, и назовем его q
. Предположим также, что мы имеем функцию f
с формальным параметром v
, например. (f (v) ...)
и вызывайте функцию как (f q)
.Common-Lisp: обязательные формальные параметры, точно, что передается?
Мой вопрос: что именно передано v
? Are
- значение
q
; - значение функции
q
; - список свойств
q
,
перешел к формальному параметру v
?
Если все они переданы v
, то я озадачен тем фактом, что нам действительно нужны функции funcall
и apply
. Если v
действительно имеет как значение, так и значение функции, то он сам может решить, что когда мы пишем (v 3)
, тогда он должен использовать значение функции v
вместо (funcall v 3)
. И когда мы используем (setq v 3)
, тогда он должен использовать значение v
.
Что точно передано v
и почему v
не является символом, а просто «параметром» или «переменной», является загадкой для меня. Но я считаю, что именно в Lisp 1.5 действительно был символ. Но, в общем, Lisp, кажется, есть некоторая комната для замешательства.
Эта информация очень полезна. В литературе иногда очень сложно. Я видел в литературе очень разные мнения и объяснения по этому поводу. Иногда мне кажется, что это не вызвано длинной историей lisp. Путаница в отношении символов против переменных, передача функций функциям, терминология о привязках является источником долговременной путаницы. –