(f x)
запрашивает функцию f
с аргументом x
. Итак, (:a :b)
вызывает :a
как функцию, в качестве аргумента - :b
. То, что на самом деле делает, на данный момент не очень важно, но оно, безусловно, не возвращает список (:a :b)
так, как это делает (list :a :b)
. Если вы хотите рассматривать список как структуру данных, а не как вызов функции, вы можете quote
его, через (quote (:a :b))
. Чтобы получить более подробную информацию о том, что такое цитата, вы можете прочитать When to use 'quote in Lisp - это не Clojure, но все же актуально.
спасибо большое! Я запутался в том, что '(= '[: a: b]' (: a: b))' возвращает 'true', потому что один из них является списком, другой - вектором. Хорошо, я должен сначала посмотреть «Когда использовать« цитату в Lisp ». – thinkerou
«Равенство ... сравнивает числа и коллекции независимым от типа образом». http://clojuredocs.org/clojure_core/clojure.core/= –
Просто добавьте к тому, что уже подразумевается в том, что amalloy и Диего Баш сказал: ThinkerOu, вы испытываете две биты гибкости в Clojure. (Эта гибкость чрезвычайно полезна, хотя это означает, что вы должны быть осторожны, чтобы гибкость не скрывала ошибок.) Во-первых, последовательности разных видов часто, по сути, автоматически принуждаются к другим типам последовательностей. Во-вторых, ключевые слова часто используются как ключи в Clojure 'maps', и из-за этого их можно рассматривать как функции. (В этом последнем вопросе есть больше.) Вот как я об этом думаю, хотя я также новичок в Clojure. – Mars