Как читать sexp из файла - PullRequest
3 голосов
/ 07 ноября 2010

Если я пишу файл, используя

(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))

Создается файл, содержащий

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

Но когда я пытаюсь открыть и прочитать его, используя

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

Я получаю ошибку ": INPUT-STREAM не типа STREAM".

(type-of f)

возвращает STREAM :: LATIN-1-FILE-STREAM, которая выглядит как минимум close к тому, что мне нужно.В чем разница?

Как я могу прочитать списки, которые я записал в файл?

Ответы [ 2 ]

5 голосов
/ 07 ноября 2010

Вы получили неправильные аргументы READ.Это должно быть просто (read f), а не (read :input-stream f).

4 голосов
/ 08 ноября 2010

Вы также можете использовать with-open-file:

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

Или даже:

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

: ввод является направлением по умолчанию.

...