Ich habe den Simple Database Abschnitt von Peter Siebels Buch Practical Common Lisp mit der Idee gelesen, eine kleine Datenbank von ungefähr 50.000 Aufzeichnungen beizubehalten. Ich dachte, dies in Emacs zu tun, könnte eine interessante und nützliche Übung sein. Emacs Lisp ist etwas kompatibel mit CL bis auf ein paar notable differences. Die Format Funktion, die in dem obigen Beispiel verwendet wird, ist ein Hauptunterschied.Aufbau und Pflege einer Datenbank in Emacs?
Hier ist der Code, der alles enthält, was zum Konstruieren, Speichern und Laden der Datenbank in CL benötigt wird. Kann dies geändert werden, um in Emacs gut zu funktionieren? Ich unterblieb die wählen und wo Funktionen, aber ich möchte sie einbeziehen. Vielleicht gibt es einen besseren Emacs Weg, eine Datenbank aufzubauen und zu pflegen? Persönlich benutze ich dies als Übung, um CL zu lernen und ein bestehendes Problem zu lösen.
;; 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")
Könnten Sie eine Probe db-Datei enthalten? Ihre Befehle sind nicht interaktiv. Wie rufen Sie sie an? –
Ich habe den Abschnitt (with-temp-buffer ...) extrahiert und verwendet. –