2011-06-13 10 views
7

Desidero indentare il seguente pezzo di codice. Come sarebbe indentato da un lisper? Sono particolarmente confuso su dove mettere i newline.Come indentare correttamente 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

In caso di dubbi sul rientro, incollarlo in Emacs in modalità clojure e utilizzare 'C-M-q'. Metti i newlines ovunque ci si senta bene. –

risposta

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

È come lo farei.

+7

Vorrei indentare gli argomenti per "ricorrere" nella stessa colonna. – Svante

1

Oltre a @ di dnolen risposta, Io di solito mettere una nuova linea quando c'è

  1. una nuova funzione (come le prime due righe)
  2. al rientro argomento lungo o importante per una funzione (come il blocco
  3. ) mantenere ogni riga a meno di 80 caratteri e suddividere le idee lunghe in blocchi più piccoli
  4. soprattutto, essere coerenti!

Quindi allineare e allineare le righe in modo che le identificazioni siano per la stessa profondità di codice.

Problemi correlati