(defn makeStructs ;line 27
"open fName as a file and turns each line into a struct. Returns a Vector of structs"
[fName]
with-open[r (reader (file fName))]
(let [r
res (doall (map makeStruct (line-seq r)))
]
(. r close)
res
)
)
Это не может работать, потому что
- У вас нет паранов вокруг вашего
with-open
. Это будет нормальный символ, если он не называется.
У вас снова есть неравное количество форм в вашем письме У вас есть r, res aund (doall ...). Вы уже сделали правильную привязку для 'r' в with-open. Все, что вам нужно, это
(let [res (doall (map makeStruct (line-seq r))))] ...)
Почему вы делаете (. r close)
макрос with-open делает это для вас здесь: http://clojuredocs.org/clojure_core/clojure.core/with-open
Итак, вы получите:
(defn makeStructs
"open fName as a file and turns each line into a struct. Returns a Vector of structs"
[fName]
(with-open [r (reader (file fName))]
(let [res (doall (map makeStruct (line-seq r)))]
res)))
но так как у вас есть только одна вещь, пусть вам это не нужно:
(defn makeStructs
"open fName as a file and turns each line into a struct. Returns a Vector of structs"
[fName]
(with-open [r (reader (file fName))]
(doall (map makeStruct (line-seq r)))))
Языки Lisp действительно просты, большинство программистов просто хотят усложнить для себя, потому что они привыкли делать это. Многие вопросы у вас возникают, потому что вы привыкли к вещам, работающим как X, но теперь они работают как Y. Постарайтесь не предполагать, что все работает как X, и вы упростите свою жизнь.