Je lisais la section Simple Database du livre de Peter Siebel Practical Common Lisp avec l'idée de maintenir une petite base de données d'environ 50 000 enregistrements. Je pensais que faire cela dans Emacs pourrait être un exercice intéressant et utile. Emacs Lisp est quelque peu compatible avec CL, sauf pour quelques notable differences. Le format fonction utilisée dans l'exemple ci-dessus étant une différence majeure.Construire et maintenir une base de données dans Emacs?
Voici le code qui contient tout ce qui est nécessaire pour construire, enregistrer et charger la base de données dans CL. Cela peut-il être modifié pour bien fonctionner dans Emacs? J'ai omis le sélectionnez et où fonctionne mais je voudrais les inclure. Peut-être y a-t-il une meilleure façon pour Emacs de construire et de maintenir une base de données? Personnellement, je l'utilise comme un exercice pour apprendre le CL et résoudre un problème existant.
;; 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")
Pourriez-vous inclure un exemple de fichier db? Vos commandes ne sont pas interactives. Comment les invoquez-vous? –
J'ai extrait la section (with-temp-buffer ...) et l'ai utilisée. –