Stavo leggendo la sezione Simple Database del libro di Peter Siebel Practical Common Lisp con l'idea di mantenere un piccolo database di circa 50.000 record. Ho pensato che farlo in Emacs potesse essere un esercizio interessante e utile. Emacs Lisp è in qualche modo compatibile con CL tranne alcuni notable differences. La funzione nella funzione utilizzata nell'esempio precedente rappresenta una differenza importante.Costruire e mantenere un database in Emacs?
Ecco il codice che contiene tutto il necessario per costruire, salvare e caricare il database in CL. Può essere modificato per funzionare bene in Emacs? Ho omesso lo selezionare e dove le funzioni ma vorrei includerle. Forse c'è un modo migliore di costruire e mantenere un database di Emacs? Personalmente, sto usando questo come esercizio per imparare CL e risolvere un problema esistente.
;; 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")
Potrebbe includere un file di esempio db? I tuoi comandi non sono interattivi. Come li invochi? –
Ho estratto la sezione (con-temp-buffer ...) e l'ho usata. –