Estaba leyendo la sección Simple Database del libro de Peter Siebel Practical Common Lisp con la idea de mantener una pequeña base de datos de alrededor de 50,000 registros. Pensé que hacer esto en Emacs podría ser un ejercicio interesante y útil. Emacs Lisp es algo compatible con CL excepto por unos pocos notable differences. La función de formato utilizada en el ejemplo anterior es una diferencia importante.Creando y manteniendo una base de datos en Emacs?
Aquí está el código que contiene todo lo necesario para construir, guardar y cargar la base de datos en CL. ¿Se puede modificar esto para que funcione bien en Emacs? Omití el seleccione y donde funciona, pero me gustaría incluirlos. Tal vez hay una mejor forma de Emacs de construir y mantener una base de datos? Personalmente, estoy usando esto como ejercicio para aprender CL y resolver un problema existente.
;; Simple Common Lisp database ;; http://www.gigamonkeys.com/book/practical-a-simple-database.html ;; (defvar *db* nil) (defun make-cd (title artist rating ripped) (list :title title :artist artist :rating rating :ripped ripped)) (defun add-record (cd) (push cd *db*)) (defun dump-db() (dolist (cd *db*) (format t "~{~a:~10t~a~%~}~%" cd))) (defun save-db (filename) (with-open-file (out filename :direction :output :if-exists :supersede) (with-standard-io-syntax (print *db* out)))) (defun load-db (filename) (with-open-file (in filename) (with-standard-io-syntax (setf *db* (read in))))) ; === ; ; Add some records ; (add-record (make-cd "Roses" "Kathy Mattea" 7 t)) (add-record (make-cd "Fly" "Dixie Chicks" 8 t)) (add-record (make-cd "Home" "Dixie Chicks" 9 t)) ; (dump-db) ; (save-db "cd.db") ; (load-db "cd.db")
Podría incluir un archivo db muestra? Tus comandos no son interactivos. ¿Cómo los invocas? –
Extraje la sección (con-temp-buffer ...) y la utilicé. –