Сокращение на (quote ...)
, '
превращает код в данные.
stuff
является символом, это означает, что он может быть именем переменной или именем функции, и т.д ..
'stuff
дает символ «материал» сам.
(dostuff "on" those 4 :parameters)
при оценке, будет работать функция dostuff
с четырьмя параметрами: строкой, содержимым переменной, числом и ключевым словом.
'(dostuff "on" those 4 :parameters)
при оценке будет возвращать код выше, который, при оценке, будет в свою очередь, функция запуска dostuff
с того, что четыре параметра ..
Например: Run '''somecode
, он возвращает ''somecode
. Запустите ''somecode
, он возвращает 'somecode
. Запустите 'somecode
, он возвращает somecode
. Запустите somecode
, и ... хорошо ... somecode
будет работать.
Вы можете сказать, что '
немного напоминает противоположное (eval..)
.
(eval (eval (eval '''(print "hello"))))
напечатал бы «Hello».
(eval (eval (eval ''''(print "hello")))
- уведомление еще '
затем eval
- ничего не печатал, но он вернул бы код (print "hello")
сам!
За исключением того, что оссики имеют тенденцию называть этот возвращенный код (а иногда даже рукописный код) «списком» вместо «кода», по причинам, которые будут кровоточить, как только вы копаете чуть глубже. Удачи :)
«Мне нужно», чтобы избежать ошибки «неопределенной переменной» - что-то серьезно нарушает ваш подход, если вы пишете этот путь, хотя я не могу сказать, что. Предложите вам задумчиво прочитать старый стандарт R4RS (за исключением приложений, более доступный, чем R5RS или R6RS) три раза. –