Я хочу сохранить данные в файл в моей elisp программе. У меня есть многомерный список, который я хочу сохранить в файл, таким образом, я могу восстановить его в следующий раз мои прогоны программы. Каково самое легкое / лучший способ сделать это?
Я понимаю, конечно, что могу просто записать свои данные в буфер в пользовательском формате и затем сохранить буфер, но тогда я должен был бы записать функцию для парсинга того формата данных, когда я хочу восстановить его. Я не должен делать этого.
В Python существует модуль Рассола, который позволяет Вам "вывести" объекты к диску и восстановить их, очень легко. Действительно ли там что-то подобно для elisp?
Эта подпрограмма ' dump-vars-to-file
создаст некоторые выражения, которые можно прочитать, просто вычислив выражения позже (через команда 'load
или ' read
):
(defun dump-vars-to-file (varlist filename)
"simplistic dumping of variables in VARLIST to a file FILENAME"
(save-excursion
(let ((buf (find-file-noselect filename)))
(set-buffer buf)
(erase-buffer)
(dump varlist buf)
(save-buffer)
(kill-buffer))))
(defun dump (varlist buffer)
"insert into buffer the setq statement to recreate the variables in VARLIST"
(loop for var in varlist do
(print (list 'setq var (list 'quote (symbol-value var)))
buffer)))
Я уверен, что мне не хватает какой-то встроенной подпрограммы, которая выполняет более приятную работу или является более гибкой.
Я протестировал это с помощью этой небольшой процедуры:
(defun checkit ()
(let ((a '(1 2 3 (4 5)))
(b '(a b c))
(c (make-vector 3 'a)))
(dump-vars-to-file '(a b c) "/some/path/to/file.el")))
Что произвело вывод:
(setq a (quote (1 2 3 (4 5))))
(setq b (quote (a b c)))
(setq c (quote [a a a]))
Для получения дополнительной информации см. Информационную страницу о чтении и печати объектов lisp