Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个在线工具可以自动缩进并格式化Clojure代码,就像JSON中有很多这样?_Clojure_Clojurescript - Fatal编程技术网

是否有一个在线工具可以自动缩进并格式化Clojure代码,就像JSON中有很多这样?

是否有一个在线工具可以自动缩进并格式化Clojure代码,就像JSON中有很多这样?,clojure,clojurescript,Clojure,Clojurescript,在线有很多工具可以获取JSON文本,并显示相同的格式和缩进良好的格式 有些甚至更进一步,形成了一个漂亮的树状结构: 我们有类似的Clojure代码吗 或者至少可以自动缩进的东西 如果我的文本是: (defn prime? [n known](loop [cnt (dec (count known)) acc []](if (< cnt 0) (not (any? acc)) (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt

在线有很多工具可以获取JSON文本,并显示相同的格式和缩进良好的格式

有些甚至更进一步,形成了一个漂亮的树状结构:

我们有类似的Clojure代码吗

或者至少可以自动缩进的东西

如果我的文本是:

(defn prime? [n known](loop [cnt (dec (count known)) acc []](if (< cnt 0) (not (any? acc))
(recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
(defn prime?[n known](循环[cnt(dec(count known))acc[](如果(
它应该自动缩进到如下内容:

(defn prime? [n known]
  (loop [cnt (dec (count known)) acc []]
    (if (< cnt 0) (not (any? acc))
    (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
(定义素数?[n已知]
(循环[cnt(dec(已知计数))acc[]
(如果(
我不知道有任何在线服务可以做到这一点,但也有Clojure图书馆可以做到这一点
clojure.pprint
随clojure一起提供(关键功能是
clojure.pprint/pprint
);布兰登·布鲁姆(Brandon Bloom)是一个明显更快的选择

请注意,这两种方法都不太可能像装备了Emacs的程序员那样格式化代码;但是,它们非常接近,非常有用,对于文字数据(不打算被解释为代码)来说,它们很可能符合人类的标准。

看看 它是全新的,完全符合您的要求

编辑我仍在为此争取选票。我相信我找到了一个更好的解决方案:您可以使用
clojure.pprint
利用
代码分派
轻松实现这一点,而无需使用外部库

(clojure.pprint/write '(defn prime? [n known](loop [cnt (dec (count known)) acc []](if (< cnt 0) (not (any? acc))                                                                                                 (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))]))))) 
  :dispatch clojure.pprint/code-dispatch)
=> 
(defn prime? [n known]
  (loop [cnt (dec (count known)) acc []]
    (if (< cnt 0)
      (not (any? acc))
      (recur
        (dec cnt)
        (concat acc [(zero? (mod n (nth known cnt)))])))))
(clojure.pprint/write'(defn prime?[n known](循环[cnt(dec(count known))acc[](如果( 
(定义素数?[n已知]
(循环[cnt(dec(已知计数))acc[]
(如果(
跟进这一点-现在有一种方法可以用于EDN和Clojure code的这一目的。

现在有一种方法可以用于这一目的

说明书 将其添加到您的Leiningen插件中:

:plugins [[lein-cljfmt "0.6.1"]]
然后,要自动格式化项目中的所有代码:

lein cljfmt fix
样品 您的示例代码将变成:

(defn prime? [n known] (loop [cnt (dec (count known)) acc []] (if (< cnt 0) (not (any? acc))
                                                                  (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
(defn prime?[n known](循环[cnt(dec(count known))acc[](如果(
添加一些换行符并重新格式化后:

(defn prime? [n known]
  (loop [cnt (dec (count known)) acc []]
    (if (< cnt 0) (not (any? acc))
        (recur (dec cnt) (concat acc [(zero? (mod n (nth known cnt)))])))))
(定义素数?[n已知]
(循环[cnt(dec(已知计数))acc[]
(如果(
谢谢。你几乎回答了我所有关于Clojure的问题!fipps的主要目标是高性能打印,而不是代码重构。仅供参考。如果您仍然感兴趣,您可能想看看我编辑的答案。尽管如此:(只打印“未捕获无效匹配参数:/^#/”在javascript控制台中,并没有呈现任何内容。@dsvensson-对此表示抱歉。clojurescript版本与服务器上运行的leiningen版本有点不协调。我已经将其移动到它自己的专用服务器上,并修复了该问题。该链接是死机的。幸运的是,如果您希望在服务器上产生类似于pprint的影响,它仍然存在整个文件,使用zprint,如中所示。@JasonBasanese为什么我不能只使用pprint?使用lein工具简单得多,而且我不认为pprint可以将文件作为输入。pprint解决方案适用于小代码行,如果您有更多的代码行,它实际上会尝试编译大函数,并且会使您的函数太大例外。