一般的なリスプでは、これを行うことができます:
src-> (defmacro macro-hello () `"hello")
(eval '(マクロこんにちは))
問題なし。
クロージュアで:
(defmacro マクロこんにちは [] `"こんにちは")
(eval '(マクロこんにちは))
エラーが発生します。私は何か間違ったことをした?
Clojure エラー:
スレッド「メイン」での例外 java.lang.Exception: シンボルを解決できません: clojure.lang.Compiler の clojure.lang.Compiler.analyze(Compiler.java:4340) で、このコンテキスト (NO_SOURCE_FILE:12) で macro-hello です。 analyze(Compiler.java:4286) at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:2767) at clojure.lang.Compiler.analyzeSeq(Compiler.java:4498) at clojure.lang.Compiler.analyze(Compiler) .java:4325) で clojure.lang.Compiler.analyze(Compiler.java:4286) で clojure.lang.Compiler$BodyExpr$Parser.parse(Compiler.java:3862) で clojure.lang.Compiler$FnMethod.parse( Compiler.java:3697) で clojure.lang.Compiler$FnMethod.access$1100(Compiler.java:3574) で clojure.lang.Compiler$FnExpr.parse(Compiler.java:2963) で clojure.lang.Compiler.analyzeSeq(コンパイラ.java:com. yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(不明なソース) 原因: java.lang.Exception: Unable to resolve symbol: macro-hello in this context at clojure.lang.Compiler.resolveIn(Compiler.java:4682) at clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 Java 結果: 14325) clojure.lang.Compiler.eval(Compiler.java:4530) で clojure.core$eval__3990.invoke(core.clj:1728) で com.yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) でclojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage.main(Unknown Source) 原因: java.lang.Exception:シンボルを解決できません: clojure.lang.Compiler.resolveIn(Compiler.java:4682) のこのコンテキストでのマクロ ハロー clojure.lang.Compiler.resolve(Compiler.java:4628) の clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 以上の Java 結果: 14325) clojure.lang.Compiler.eval(Compiler.java:4530) で clojure.core$eval__3990.invoke(core.clj:1728) で com.yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) でclojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage.main(Unknown Source) 原因: java.lang.Exception:シンボルを解決できません: clojure.lang.Compiler.resolveIn(Compiler.java:4682) のこのコンテキストでのマクロ ハロー clojure.lang.Compiler.resolve(Compiler.java:4628) の clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 以上の Java 結果: 1yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(不明なソース) 原因: java.lang.Exception: Unable to resolve symbol: macro-hello in this context at clojure.lang.Compiler.resolveIn(Compiler.java:4682) at clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 Java 結果: 1yourcompany.defpackage$_main__4.invoke(defpackage.clj:12) at clojure.lang.AFn.applyToHelper(AFn.java:171) at clojure.lang.AFn.applyTo(AFn.java:164) at com.yourcompany.defpackage .main(不明なソース) 原因: java.lang.Exception: Unable to resolve symbol: macro-hello in this context at clojure.lang.Compiler.resolveIn(Compiler.java:4682) at clojure.lang.Compiler.resolve( Compiler.java:4628) at clojure.lang.Compiler.analyzeSymbol(Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 Java 結果: 1シンボルを解決できません: clojure.lang.Compiler.resolveIn(Compiler.java:4682) のこのコンテキストでのマクロ ハロー clojure.lang.Compiler.resolve(Compiler.java:4628) の clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 以上の Java 結果: 1シンボルを解決できません: clojure.lang.Compiler.resolveIn(Compiler.java:4682) のこのコンテキストでのマクロ ハロー clojure.lang.Compiler.resolve(Compiler.java:4628) の clojure.lang.Compiler.analyzeSymbol( Compiler.java:4605) at clojure.lang.Compiler.analyze(Compiler.java:4307) ... 17 以上の Java 結果: 1
[編集]: 末尾の二重引用符を追加