編集コードのすべての行を「インデント」することだけでなく、「きれいな印刷」および/または「インデント」のより広い定義について質問しています。行は、含まれているものに応じてグループ化/分割されます。
これは、私がきれいに印刷しようとしている関数です(これはオイラーの問題を解決するために書きましたが、それは重要ではありません。別の方法で書くこともできました)。
手動でインデントされたバージョン:
(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000)))))
どうやら、これは真の Lisp のインデント/印刷スタイルではないようで、最初から良い習慣を身につけたいので、Emacs のslime-repl clojure REPLから次のようにして、「きれいに印刷」しようとしました。
user> (doc pprint) ;; just to show which version of pprint I'm using
clojure.pprint/pprint
...
だから私はやろうとした:
user> (pprint '(apply max
(flatten
(for [x (range 100 1000)]
(map
#(if (= (str (* x %)) (apply str (reverse (str (* x %)))))
(* x %)
0)
(range x 1000))))))
そして、私は以下を得ました:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
(fn*
[p1__13958#]
(if
(=
(str (* x p1__13958#))
(apply str (reverse (str (* x p1__13958#)))))
(* x p1__13958#)
0))
(range x 1000)))))
私が理解しているように、ラムダの#(...)表記は「リーダーマクロ」です。では、マクロの展開をトリガーせずにきれいに印刷するにはどうすればよいでしょうか? より一般的には、「テキスト エディターに表示されているもの」をきれいに印刷するにはどうすればよいですか?
また、ほとんどすべてが改行されるのは普通ですか? 例えば:
(apply
max
(flatten
(for
[x (range 100 1000)]
(map
...
かなりの垂直画面領域を無駄にしているようです。これはLisp コードをインデントする方法ですか?
最後の関連する質問: Emacs は、選択した領域または.cljバッファー全体を「きれいに印刷」するように構成できますか?