#string #list #file #common-lisp
#lisp #common-lisp
Вопрос:
Если я напишу файл, используя
(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)
Я получаю сообщение об ошибке «: ВХОДНОЙ ПОТОК не имеет типа STREAM».
(type-of f)
возвращает STREAM::LATIN-1-FILE-STREAM, который выглядит так, как будто он, по крайней мере, близок к тому, что мне нужно. В чем же разница?
Как я могу прочитать списки, которые я записал в файл?
Ответ №1:
У вас неправильные аргументы READ
. Это должно быть просто (read f)
, а не (read :input-stream f)
.
Ответ №2:
Вы также можете использовать with-open-file:
(with-open-file (s "~/example.sexp")
(read s))
Или даже:
(with-open-file (*standard-input* "~/example.sexp")
(read))
: ввод — это направление по умолчанию.