3

次の無意味な*.cljファイルがあります。

(ns bar.zar.Foo
  (:gen-class :main true))

(println "foo")

(defn -main [& args]
   nil)

次の Ant ターゲットを使用して*.class( )にコンパイルする場合:clojure.lang.Compile

<target name="compile-clojure" description="Compile Clojure sources." depends="resolve">
  <mkdir dir="${cljbuild.dir}"/>
  <java classname="clojure.lang.Compile"
        failonerror="true"
        fork="true">
    <classpath refid="compile.classpath"/>
    <sysproperty key="clojure.compile.path" value="${cljbuild.dir}"/>
    <arg value="${project.MainClass.name}"/>
  </java>
</target>

出力に次のように表示されます。

 [java] Compiling bar.zar.Foo to /home/[ommitted]/build
 [java] foo

つまり、(println "foo")式はコンパイル中に評価されました。何故ですか?「Lispはコンパイル時/実行時の区別を曖昧にする」ことと関係がありますか?

4

1 に答える 1