如何正确缩进clojure/lisp?

如何正确缩进clojure/lisp?,clojure,lisp,indentation,code-formatting,primes,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

我想缩进下面的代码。 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)))))

除了@dnolen的答案外,我通常在出现错误时添加新行

  • 新函数(如前两行)
  • 将长参数或重要参数缩进函数(如
    cond
    块)
  • 从逻辑上讲,每行字数应少于80个字符,并将冗长的想法分成小块
  • 最重要的是,要始终如一 然后只需对齐和缩进行,使标识具有相同的代码深度

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

    如果对缩进有疑问,请以clojure模式将其粘贴到Emacs中,然后使用
    C-M-q
    。把换行放在感觉合适的地方。我会将参数缩进到同一列中的
    recur