Esiste un modo più semplice per elaborare più stati vero / falso rispetto all'utilizzo di istruzioni nidificate if? Penso che ci sia, e sarebbe di creare una sequenza di stati, e quindi utilizzare una funzione come when
per determinare se tutti gli stati erano vere, e abbandonare se non. Sto facendo la domanda per assicurarmi che non ci sia un modo Clojure preferito per farlo.
Ecco lo sfondo del mio problema:
Ho un'applicazione che dipende da alcuni file di input. L'applicazione dipende dai report di dati .csv; intestazioni di colonna per ogni rapporto (anche file .csv), in modo che ciascuna sequenza nella sequenza di sequenze possa essere compresso insieme alle sue colonne allo scopo di creare una sequenza più piccola; e file di colonne per i dati di output.
Uso le seguenti funzioni per scoprire se un file è presente:
(defn kind [filename]
(let [f (File. filename)]
(cond
(.isFile f) "file"
(.isDirectory f) "directory"
(.exists f) "other"
:else "(cannot be found)" )))
(defn look-for
[filename expected-type]
(let [find-status (kind-stat filename expected-type)]
find-status))
E qui ci sono le prime righe di un multiplo se sembra brutto ed è difficile da mantenere:
(defn extract-re-values
"Plain old-fashioned sub-routine to process real-estate values / 3rd Q re bills extract."
[opts]
(if (= (utl/look-for (:ifm1 opts) "f") 0) ; got re columns?
(if (= (utl/look-for (:ifn1 opts) "f") 0) ; got re data?
(if (= (utl/look-for (:ifm3 opts) "f") 0) ; got re values output columns?
(if (= (utl/look-for (:ifm4 opts) "f") 0) ; got re_mixed_use_ratio columns?
(let [re-in-col-nams (first (utl/fetch-csv-data (:ifm1 opts)))
re-in-data (utl/fetch-csv-data (:ifn1 opts))
re-val-cols-out (first (utl/fetch-csv-data (:ifm3 opts)))
mu-val-cols-out (first (utl/fetch-csv-data (:ifm4 opts)))
chk-results (utl/chk-seq-len re-in-col-nams (first re-in-data) re-rec-count)]
Non sto cercando una discussione sul modo migliore, ma ciò che è in Clojure facilita la risoluzione di un problema come questo.