Этот ответ не сильно отличается от других, он просто не предполагает, что вы изначально хотите изучить несколько новых функций и понятий, чтобы понять, что происходит:
+
это символ, расположенный в clojure.core
, который по умолчанию доступен для вашего кода. +
используется в позиции заголовка списка, clojure попытается вызвать эту функцию (NullPointerException
, если этот Var не указал на функцию). Если в качестве аргумента используется другая функция, эта функция может сделать то же самое, чтобы вызвать ее. Вот как работает вызов функции. Большинство или все языки используют таблицы символов. Будучи несколько динамичным языком, Clojure использует этот дополнительный слой косвенности (функция Symbol → Var →, а не только функция Symbol →), так что динамическое переписывание, какая функция привязана к тому или иному символу, является более выполнимой и элегантной, и это иногда источник любопытства для начинающих.
Поскольку другие ответы несколько чрезмерно подчеркнуты, вы можете в противном случае выполнить причудливый материал , как и цитату ('+
), чтобы избежать его оценки, или даже проверить его с помощью class
и / или resolve
, как будто вы заинтересованы в том, чтобы проверить, что это (class
), или какое пространство имён находится (resolve
). Вы также можете вытолкнуть в пункте var, через пункты var
или #'
. Обычно вы делаете эти причудливые вещи, если пишете макросы или если вы очень экспериментально настроены, особенно при работе в repl; в зависимости от того, в каком стиле вы пишете свои макросы, вы можете на самом деле довольно много цитировать в них.
Будучи несколько гибким языком, clojure предоставляет api для использования функции Symbol → Var → самостоятельно. Обычно вы никогда не делали этого только для использования функции, потому что, очевидно, это было бы скучно и избыточно, но оно может быть использовано здесь для иллюстрации процесса:
(deref (resolve '+))
А именно, первый символ разрешенному его Вар, тогда вещь, на которую указывает Вар, прибывает. Это просто иллюстрирует двухэтапный процесс для получения функции (функция «Символ → Вар →)), которая происходит за кулисами. Надеюсь, вы избежали чтения этой дополнительной части.
ответ на исходный вопрос просто: Да.