Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read sexp from 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 is created containing

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

But when I attempt to open and read it using

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

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

(type-of f)

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

How can I read the lists I've written to the file?

like image 984
displayname Avatar asked Dec 12 '22 18:12

displayname


2 Answers

You got the arguments to READ wrong. It should be simply (read f), not (read :input-stream f).

like image 96
Xach Avatar answered Mar 12 '23 09:03

Xach


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.

like image 25
Rainer Joswig Avatar answered Mar 12 '23 11:03

Rainer Joswig