2011-06-13 11 views
7

Quiero sangrar el siguiente fragmento de código. ¿Cómo sangraría esto? Estoy especialmente confundido acerca de dónde poner líneas nuevas.¿Cómo sangrar correctamente 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

En caso de duda sobre la indentación, péguela en Emacs en modo clojure y use 'C-M-q'. Coloque líneas nuevas donde se sienta bien. –

Respuesta

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

Es cómo lo haría.

+7

Yo doblaría los argumentos para 'recurrir' a la misma columna. – Svante

1

Además de la respuesta de @ dnolen, yo suelo poner una nueva línea cuando hay

  1. una nueva función (como sus dos primeras líneas)
  2. a sangrar el argumento de largo o importante para una función (como el bloque cond)
  3. lógicamente mantener cada línea a menos de 80 caracteres y romper las ideas largas a trozos más pequeños
  4. lo más importante, ser coherentes!

A continuación, solo alinee y sangría las líneas para que las identidades tengan la misma profundidad de código.

Cuestiones relacionadas