На самом деле здесь есть две проблемы:
1) ваша функция foo
возвращает nil
, и кажется, что функция чтения не может возвращать литеральный ноль. Таким образом, вам действительно нужно вернуть что-то из foo
:
(defn foo [x]
(println x "Hello, World!")
:something)
или, если вам действительно нужно nil
в сгенерированном коде, вы можете сделать это:
(defn foo [x]
(println x "Hello, World!")
'(quote nil))
2 ) вторая проблема заключается в том, что вы на самом деле пытаетесь вызвать результат применения вашего тега здесь:
(#ct/G "abc")
синтаксис #tag value
оценивается во время чтения с помощью (tag-fn value)
, и затем результат буквально помещается в исходный код. когда вы используете дополнительную пару паренов, это то, что происходит в вашем случае:
((foo "abc"))
, и, когда функция foo
возвращает foo-return-value
, тогда она остается равной (foo-return-value)
, и это, в свою очередь, приводит к ошибке.
, поэтому
(defn foo [x]
(println x "Hello, World!")
:nothing)
(defn -main
[& args]
(println "Hello, World!")
(foo 123)
#ct/G "abc")
, вероятно, должно работать