2011-06-13 4 views
7

次のコードをインデントしたいと思います。 これはどのようにひどいインデントですか? 私は改行をどこに置くべきかについて特に混乱します。 @ dnolenの答えに加えてclojure/lispを正しくインデントする方法は?

(defn primes [n] 
    (letfn [(sieve [table removal] 
       (assoc table removal false)) 
      (primebools [i table] 
         (cond 
         (= i n) table 
         (table i) (recur (inc i) 
              (reduce sieve 
                table 
                (range (* i i) n i))) 
         :else (recur (inc i) 
             table)))] 
    (let [prime? (primebools 2 (apply vector (repeat n true)))] 
     (filter prime? (range 2 n))))) 
+4

インデントが疑わしいときは、Emacsにクロージャモードで貼り付け、 'C-M-q'を使います。気分が良いところは改行を入れてください。 –

答えて

5
(defn primes [n] 
    (letfn [(sieve [table removal] 
      (assoc table removal false)) 
      (primebools [i table] 
      (cond 
       (= i n) table 
       (table i) (recur (inc i) 
          (reduce sieve table 
          (range (* i i) n i))) 
       :else (recur (inc i) table)))] 
    (let [prime? (primebools 2 (apply vector (repeat n true)))] 
     (filter prime? (range 2 n))))) 

どうすればいいですか?

+7

同じ列に 'recur'の引数をインデントします。 – Svante

1

  1. は(あなたの最初の二行のような)新しい機能
  2. 関数に長いかの重要な引数をインデントすることがありますとき、私は通常、改行を入れて(condブロックのような)
  3. 論理的に各行を80文字未満にして、長いアイデアを小さなチャンクに分解してください。
  4. 一番重要なのは、一貫していることです。

次に、コードが同じ深さのものであるように、行を整列してインデントしてください。

関連する問題