Given the following code, I have written a for
loop that returns a key and value (0 or 1) of file names passed. 1 means present, and 0 means not present.
Is there a way to construct a flat map without having to use into
?
(defn kind-stat
[filename expected-type]
(let [f (File. filename)
s (cond
(.isFile f) "f"
(.isDirectory f) "d"
(.exists f) "o"
:else "n" )]
(if (= expected-type s)
0
1)))
(defn look-for
[filename expected-type]
(let [find-status (kind-stat filename expected-type)]
find-status))
(defn all-files-present?
"Takes a list of real file names, and returns a sequence of maps
indicating the file name and its availability status 1 for present
and 0 for not present. Please note look-for returns 0 for success,
so its return logic needs to be reversed for the return sequence
of maps."
[file-seq]
(for [fnam file-seq
:let [stat-map {(keyword fnam)
(if (= (look-for fnam "f") 0)
1
0)}]]
stat-map))
(into {}
(all-files-present? '("Makefile" "build.sh" "real-estate.csv")))
{:Makefile 1, :build.sh 1, :real-estate.csv 0}