How to read sexp from a file

If I write a file using

(with-open-file (s "~/example.sexp" :direction :output)
           (write '(1 2 3) :stream s)
           (write '(4 5 6) :stream s)
           (write '(7 8 9) :stream s))

A file containing

(1 2 3)(4 5 6)(7 8 9)

But when I try to open and read it using

(setf f (open "~/example.sexp"))
(read :input-stream f)

I get an error: INPUT-STREAM is not of type STREAM.

(type-of f)

returns STREAM :: LATIN-1-FILE-STREAM, which looks at least close to what I need. What is the difference?

How can I read the list that I wrote to the file?

+3
source share
2 answers

You have an argument READ. It should be simple (read f), not (read :input-stream f).

+5
source

You can also use with open file:

(with-open-file (s "~/example.sexp")
  (read s))

Or even:

(with-open-file (*standard-input* "~/example.sexp")
  (read))

: input is the default direction.

+4
source

Source: https://habr.com/ru/post/1773532/


All Articles