Я пытаюсь выучить Common Lisp, и обнаружил что-то неожиданное (для меня), когда что-то пробовал в реплее. Основываясь на порядке выполнения в большинстве языков программирования и отличной поддержке функций первого класса, о которой я всегда слышал от lisp, я думаю, что должно сработать следующее:
((if t 'format) t "test")
В Ruby я могу сделать:
if true
Object.method(:puts)
end.call("test")
Я думаю о том, как должен работать приведенный выше код lisp, что он должен оценить внутреннюю форму lisp, вернуть формат, а затем начать оценивать внешнюю форму lisp, тогда как format
будет первым атомом. Я читал, что первая форма должна быть символом, поэтому я также попытался ((if t format) t "test")
, хотя изначально я думал, что он попытается оценить формат, прежде чем вернуться из внутренней формы.
Я заметил, что иногда формы lisp должны предшествовать #'
, чтобы их результаты могли быть вызваны, но использование (#'(if t 'format) t "test")
также не работает. Я уверен, что просто неправильно понимаю что-то базовое, потому что я довольно новичок в этом, но что здесь происходит?