【问题标题】:How to run clojure program from terminal如何从终端运行clojure程序
【发布时间】:2014-10-03 02:06:02
【问题描述】:

我刚刚开始学习 clojure,并且正在使用 Textmate 编辑器来编写脚本。但是,我无法弄清楚如何从终端运行它。就像我键入 clj filename.clj 命令但没有任何反应。我是否还需要在某处包含函数名称,因为我有一个将数字作为参数的函数。

这是我想从终端运行的代码:

(defn next-collatz-num [n]


(if (even? n)
    (quot n 2)
    (inc (* n 3))))

(defn collatz [n]
  (take-while #(< 1 %)(iterate next-collatz-num n)))

(defn max-count-collatz [n]
  (when (> n 0)
    (first
      (reduce
        #(if (> (last %1)(last %2)) %1 %2)
          [1 1] (map #(list % (count (collatz %))) (range 1 (inc n)))))))

(max-count-collatz 999999)

【问题讨论】:

    标签: clojure


    【解决方案1】:

    Clojure 具有比在终端命令提示符下运行整个脚本更具交互性的环境。

    TL;DR,安装leiningen,创建project.clj,然后运行lean repl

    如果您不想创建project.clj,或者如果您想知道如何通过艰难的方式来创建,请继续阅读...

    您可以使用以下命令启动 Clojure 读取-评估-打印-循环 (REPL) 交互式提示符

    java -cp clojure-1.6.0.jar clojure.main
    

    (下载最新的 Clojure jar here)。

    进入 REPL 后,加载代码文件:

    (load-file "my-script.clj")
    

    现在,你可以直接调用函数了:

    (max-count-collatz 5)
    

    如果它没有像您期望的那样工作,请更改代码,保存并在 REPL 中重新加载:

    (require 'my-script :reload-all)
    

    【讨论】:

    • 我不明白“一旦你进入 REPL”的说法。怎么样?
    • @EricaMaine,使用终端的第一行 (java -cp clojure-1.6.0.jar clojure.main) 启动 Clojure REPL。
    • 线程“main”中的异常 java.lang.NoClassDefFoundError: clojure/main 这是我使用该行时得到的结果。
    • @EricaMaine 这假设 clojure-1.6.0.jar 在当前工作目录中。如果不是,请相应地调整 clojure-1.6.0.jar 的路径。有关详细信息,请参阅clojure.org/getting_started
    • 最好安装leiningen。然后运行lein repl
    【解决方案2】:

    虽然可以使用 Clojure.jar 运行单个 Clojure 文件,但 Clojure 最好的地方之一是 leiningen 依赖管理器和构建工具。创建一个项目很容易,而且对于没有外部依赖的单个文件以外的任何东西,它比直接使用 java 和 Clojure.jar 是一个巨大的改进。

    【讨论】:

    • 嗨,在我的问题代码中,当我输入 (collat​​z 7) 时,出现的结果是 (7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2),但是它实际上应该是(7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1)。为什么最后少了 1?
    • 那是因为你打电话给(take-while #(&lt; 1 %) ...) - 也许你想要pos?(complement zero?)#(&gt; % 1)
    • 嗨,这次我试图在我的 clojure 代码中使用命名空间,使用 ns.所以,我在下载目录中有我的 jar 文件,我在下载目录中创建了一个文件夹“扑克”。在“poker”文件夹中,我创建了两个相互依赖的clojure文件,所以我也把我的jar文件放在了poker文件夹中。现在,当我这样做时: java -cp clojure-1.6.0.jar clojure.main 它给了我“权限被拒绝”。这是为什么呢?
    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2013-02-27
    相关资源
    最近更新 更多