LINUX.ORG.RU

common lisp, объекты Lisp - запись / чтение


0

0

у меня вот какой вопрос, имеется объект lisp:

obj <-- (make-array 0 :fill-pointer 0 :adjustable t)
необходимо сохранить этот объект в файл и затем восстановить, прочитав. как это сделать?

или нельзя и прийдётся в 2 этапа действовать:

1.создавать объект

2.вручную добавлять элементы

Ответ на: комментарий от den73
(let ((*print-readably* t))
	(with-open-file (out "test.save"
			     :direction :output
			     :if-does-not-exist :create)
	  (print *name-db* out)))

--->

#<MP3-DB {BB26001}> cannot be printed readably.

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от pseudo-cat

ну так это же не вектор. Тогда надо сделать

(defmethod print-object ((object mp3db) s) ...)

Однако, тут могут быть проблемы с цикличностью. Чтобы её избежать, лучше
не пользоваться CLOS, а пользоваться только структурами, векторами и списками. Их можно вводить-выводить спокойно, если в них находятся печатабельные объекты (например, символы, строки и числа). Кстати, структуры во многих случаях работают в разы быстрее, чем CLOS объекты.
Родовые функции над структурами определять можно, т.к. они являются полноценными типами лиспа. Есть также и наследование структур.

Есть и другой подход, сделать метод преобразования в-из списка. Он будет полезен не только для сериализации, а ещё и для многих других вещей. Читаем вот это:
http://groups.google.com/group/comp.lang.lisp/browse_thread/thread/580c812013...

den73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.