2011-06-13 78 views
7

我想縮進下面的一段代碼。 一個Lisper如何縮進這個? 我對將換行符放在哪裏感到特別困惑。如何正確縮進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的clojure模式並使用「C-M-q」。在任何感覺良好的地方放置換行符。 – 2011-06-13 21:00:05

回答

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 2011-06-13 21:01:47

1

除了@ dnolen的答案,我通常把一個新的生產線時,有

  1. 新功能(如您的前兩行)
  2. 縮進長或重要參數傳遞給函數(如cond區塊)
  3. 從邏輯上保持每行少於80個字符並將較長的想法分解爲較小的區塊
  4. 最重要的是要保持一致!

然後,只需對齊並縮進行,以便識別碼具有相同的深度。