У меня есть две проблемы, связанные со следующими:
user=> (if (symbol? 5) (meta (var 5)) 5)
CompilerException java.lang.ClassCastException: java.lang.Long cannot be cast to clojure.lang.Symbol, compiling:(NO_SOURCE_PATH:6)
user=> (defn dometa [x] (if (symbol? x) (meta (var x)) x))
CompilerException java.lang.RuntimeException: Unable to resolve var: x in this context, compiling:(NO_SOURCE_PATH:7)
user=>
В первом случае, поскольку 5 - это не символ, я бы не ожидал, что (meta (var 5))
будет оцениваться, но это так (или, по крайней мере, так мне кажется).
Во втором случае, если я хочу поместить первое выражение в функцию и параметризовать проверяемое значение, функция (var ...) больше не работает.