gpt4 book ai didi

emacs - 在 Emacs 中构建和维护数据库?

转载 作者:行者123 更新时间:2023-12-04 02:20:41 25 4
gpt4 key购买 nike

我正在阅读 Simple Database Peter Siebel 的书的部分 Practical Common Lisp的想法是维护一个包含大约 50,000 条记录的小型数据库。我认为在 Emacs 中执行此操作可能是一项有趣且有用的练习。除了少数 notable differences,Emacs Lisp 与 CL 有点兼容。 . 格式上面示例中使用的函数是一个主要区别。

这是包含在 CL 中构建、保存和加载数据库所需的一切的代码。可以修改它以在 Emacs 中正常工作吗?我省略了 选择 哪里功能,但我想包括它们。也许有更好的 Emacs 构建和维护数据库的方法?就个人而言,我将此作为练习来学习 CL 并解决现有问题。

;;简单的 Common Lisp 数据库
;; http://www.gigamonkeys.com/book/practical-a-simple-database.html
;;
(defvar *db* nil)

(defun make-cd(标题艺术家评级被撕毁)
(列表:标题标题:艺术家艺术家:评级评级:翻录翻录))

(defun add-record (cd) (push cd *db*))

(defun dump-db()
(dolist (cd *db*)
(格式 t "~{~a:~10t~a~%~}~%"cd)))

(defun save-db (文件名)
(带打开文件(输出文件名
:方向:输出
:if-exists :supersede)
(带有标准io语法
(打印 *db* 输出))))

(defun load-db (文件名)
(with-open-file (in filename)
(带有标准io语法
(setf *db* (读入)))))
; ===
;
;添加一些记录
;
(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))

; (转储数据库)
; (保存数据库“cd.db”)
; (加载数据库“cd.db”)

最佳答案

这是我的解决方案:

(defvar *db* nil)

(setq *db* ())

(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))

(defun add-record (cd) (push cd *db*))

(defun init ()
(progn
(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))
))

(defun save-db (filename)
(with-temp-buffer
(print *db* (current-buffer))
(write-file filename))
(message "Saving database...done")
)

(defun load-db (filename)
(with-temp-buffer
(insert-file-contents filename)
(setq *db* (read (current-buffer)))))

(defun dump-db ()
(dolist (cd *db*)
(print cd)))


;; Test in M-x lisp-interaction-mode
;;(init)
;;(save-db "cd.db")
;*db*
;(add-record (make-cd "Born To Run" "Bruce Springsteen" 10 t))
;(add-record (make-cd "The River" "Bruce Springsteen" 10 t))
;(add-record (make-cd "Nebraska" "Bruce Springsteen" 10 t))
;(add-record (make-cd "Human Touch" "Bruce Springsteen" 10 nil))
;;(save-db "cd.db")
;(setq *db* ())
;;(load-db "cd.db")
;*db*

关于emacs - 在 Emacs 中构建和维护数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com