Ich habe die Einfache Datenbank Abschnitt des Buches von Peter Siebel Praktisches Common Lisp mit der Idee, eine kleine Datenbank mit etwa 50.000 Datensätzen zu unterhalten. Ich dachte, dies in Emacs zu tun, könnte eine interessante und nützliche Übung sein. Emacs Lisp ist einigermaßen kompatibel mit CL, abgesehen von ein paar bemerkenswerte Unterschiede . Die Format Funktion, die im obigen Beispiel verwendet wurde, ist ein wesentlicher Unterschied.
Hier ist der Code, der alles enthält, was zum Erstellen, Speichern und Laden der Datenbank in CL benötigt wird. Kann dieser Code so modifiziert werden, dass er in Emacs gut funktioniert? Ich habe das Wählen Sie y wobei Funktionen, aber ich würde sie gerne einbeziehen. Vielleicht gibt es eine bessere Emacs-Methode zum Aufbau und zur Pflege einer Datenbank? Ich persönlich benutze dies als eine Ü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")