如何正确缩进clojure / lisp?

时间:2011-06-13 20:25:41

标签: clojure lisp indentation code-formatting primes

我想缩进下面这段代码。 一个lisper如何缩进呢? 我特别感到困惑的是在哪里放新线。

(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)))))

2 个答案:

答案 0 :(得分: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)))))

我是怎么做的。

答案 1 :(得分:1)

除了@ dnolen的回答之外,我通常会在

时添加新行
  1. 一个新功能(如前两行)
  2. 缩进函数的长或重要参数(如cond块)
  3. 逻辑上保持每行少于80个字符,并将长想法分解为较小的块
  4. 最重要的是,要保持一致!
  5. 然后只需对齐和缩进行,以便标识符合相同的代码深度。