With clojure read/read-string function, how do i r

2019-07-04 11:52发布

问题:

As titled, If I do

(read-string (slurp "somefile"))

This will only give me the first object in the file, meaning if "somefile" is as below:

(a obj) (b obj)

Then I only get (a obj) as the result.

How do i get a list of all objects, like this?

((a obj) (b obj))

Thanks.

回答1:

(defn read-all
  [input]
  (let [eof (Object.)]
    (take-while #(not= % eof) (repeatedly #(read input false eof)))))


回答2:

I usually wrap stuff in a list,

(read-string (str \( (slurp "somefile")  \)))