То, что вы на самом деле делаете, - это использование символа в качестве функции и передача ему аргументов.Вы можете прочитать связанные вопросы и ответы , которые описывают это более подробно.Из ответа:
Теперь символы можно использовать в качестве функций (они реализуют интерфейс clojure.lang.IFn), но способ, которым они действуют при использовании таким образом, заключается в том, что они ищут себя в своихаргумент, то есть обработайте их аргумент как карту и выполните поиск внутри нее
Как указано в ответе @ akond, read-string
возвращает символ, а load-string
также оценивает его.Вы можете запустить то же поведение, передав любой другой символ:
((symbol 'hi) 2 3)
;; 3
('foo 2 3)
;; 3
('foo '{foo 2} 3)
;; 2
('foo 2)
;; nil since there is no default value provided
Если вам интересно, вы можете взглянуть на Реализация символа в исходном коде Clojure.