源代码:
;;定义一个全局变量,用于存放数据
(defvar *db* nil)
;;制作一个CD需要的信息
(defun make-cd (title artist rating ripped)
(list :title title :artist artist :rating rating :ripped ripped))
;;将一条CD信息记录到全局变量中
(defun add-record (cd) (push cd *db*))
;;格式化输出数据
(defun dump-db ()
(format t "~{~{~A: ~10t~A~%~}~%~}" *db*))
;;交互信息
(defun prompt-read (prompt)
(format *query-io* "~A: " prompt)
(force-output *query-io*)
(read-line *query-io*))
;;交互获取CD信息
(defun prompt-for-cd ()
(make-cd
(prompt-read "Title")
(prompt-read "Artist")
(or (parse-integer (prompt-read "Rating") :junk-allowed t) 0)
(y-or-n-p "Ripped [y/n]: ")))
;;添加任意个CD信息
(defun add-cds ()
(loop (add-record (prompt-for-cd))
(if (not (y-or-n-p "Another? [y/n]: ")) (return))))
;;将所有CD信息保存到文件中
(defun save-db (filename)
(with-open-file (out filename
:direction :output
:if-exists :supersede