【问题标题】:How to properly indent clojure/lisp?如何正确缩进clojure/lisp?
【发布时间】:2011-09-14 05:17:06
【问题描述】:

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

【问题讨论】:

  • 如果对缩进有疑问,请将其粘贴到 clojure-mode 的 Emacs 中并使用 C-M-q。在感觉良好的地方添加换行符。

标签: clojure lisp indentation code-formatting primes


【解决方案1】:
(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)))))

我会怎么做。

【讨论】:

  • 我会将recur 的参数缩进到同一列。
【解决方案2】:

除了@dnolen 的回答,我通常会在有的时候换行

  1. 一个新函数(就像你的前两行)
  2. 缩进函数的长参数或重要参数(如cond 块)
  3. 在逻辑上将每行保持在 80 个字符以内,并将较长的想法分解成更小的块
  4. 最重要的是,保持一致!

然后只需对齐和缩进行,以便标识用于相同的代码深度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2018-05-26
    相关资源
    最近更新 更多