我正在编写一个名为“gpqgame”的clojurescript程序,它可以演变代码片段;它通过在名为“qgame”的模拟器上运行它来评估一段代码的“准确性”,这是另一个目录中的leiningen项目。
到目前为止,我已经手动将所有qgame代码加载到repl中,然后使用它来测试我的进化代码。但是,我希望能够从终端运行代码,所以我将我的gpqgame设置为lein项目,并且一直在尝试使用nodejs。我很快就遇到了麻烦。
Gpqgame似乎无法加载qgame,我不知道为什么,我已经包含了两个的project.clj文件。我已经尝试将整个项目作为lib和foreign-lib加载到cljs-build中,我尝试将qgame的“src”复制到gpqgame的“src”中,同时包含qgame在资源中需要的库gpqgame。我的gpqame.core有以下ns声明:
(ns gpqgame.core
(:require [clojure.string :as st]
[qgame.simulator.interpreter :as inter]
[qgame.gp.evaluator :as ev]
[qgame.simulator.qgates :as qg]
[clojure.browser.repl :as repl]))
它包含(enable-console-print!)
和(set! *main-cli-fn* -main)
。
每次编辑都会成功,但会发出警告: 1)在qgame代码中使用未声明的变量 2)旧版javascript中不允许使用关键字和保留字作为不带引号的属性名称
当我运行node out/gpqgame.js
时,我收到一条引用错误,说“mathjs未定义”。我注意到的一件事是qgame使用0.0-2156,而我的gpqgame使用0.0-2913。如果我将其中一个版本的版本更改为另一个版本,则它们将不再起作用。
有没有一种简单的方法让gpqgame加载整个qgame项目而不必将其包含在gpqgame项目中?
这是最好的方法,还是应该将它包含在qgame的src中?当我这样做时,为什么它不起作用,即使我包含了它需要的库?我不确定这与nodejs有多大关系,以及我自己设置错误的原因。任何帮助将不胜感激。
(defproject gpqgame "0.1.0-SNAPSHOT"
:description "FIXME: write this!"
:url "http://example.com/FIXME"
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-2913"]]
:node-dependencies [[source-map-support "0.2.8"]]
:plugins [[lein-cljsbuild "1.0.4"]
[lein-npm "0.4.0"]]
:hooks [leiningen.cljsbuild]
:source-paths ["src" "target/classes"]
:clean-targets ["out" "out-adv"]
:cljsbuild {
:builds [{:id "dev"
:source-paths ["src"]
:compiler {
:main gpqgame.core
:target :nodejs
:output-to "out/gpqgame.js"
:output-dir "out"
:optimizations :simple
:foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
:provides ["math.js"]}
{:file "./resources/arndt.js"
:provides ["arndt.js"]}]
:pretty-print true
:cache-analysis true
:source-map "out/gpqgame.js.map"}}]})
qgame project.clj看起来像:
(defproject org.clojars.hippiccolo/qgame "0.4.4"
:description "Quantum Gate And Measurement Emulator, or qgame. A machine-instruction-level quantum computing simulator. Ported from Lee Spector's QGAME (written in Common Lisp)."
:license {:name "MIT License"
:url "http://http://en.wikipedia.org/wiki/MIT_License"}
:url "https://github.com/omriBernstein/qgame"
:dependencies [[org.clojure/clojure "1.5.1"]
[org.clojure/clojurescript "0.0-2156"]] ;2156
:plugins [[lein-cljsbuild "1.0.2"]]
:cljsbuild {:builds
{:dev {:source-paths ["src"]
:compiler {:output-to "static/qgame.js"
:optimizations :whitespace
:pretty-print true
:libs ["~/computer/javascript/prototype.js"]
:foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
:provides ["math.js"]}
{:file "./resources/arndt.js"
:provides ["arndt.js"]}
{:file "./resources/prototype.js"
:provides ["prototype.js"]}]}}
:prod {:source-paths ["src/qgame"]
:compiler {:output-to "static/qgame.min.js"
:optimizations :whitespace ;Eventually do :advanced here
:pretty-print false
:libs ["~/computer/javascript/prototype.js"]
:foreign-libs [{:file "http://cdnjs.cloudflare.com/ajax/libs/mathjs/0.18.1/math.min.js"
:provides ["math.js"]}
{:file "./resources/arndt.js"
:provides ["arndt.js"]}
{:file "./resources/prototype.js"
:provides ["prototype.js"]}]}}}
:repl-listen-port 9000}
:min-lein-version "2.0.0")