lisp - 格式化 Practical Common LISP 的第一个练习时出现问题

标签 lisp common-lisp practical-common-lisp

我开始学习 Practical Common LISP,第一个练习是写一个 simple database .我在 cygwin 上使用 GNU CLISP 2.48 (2009-07-28)。

这段代码,我已经多次与书中进行了比较,并没有按照书中所说的那样产生输出

(defun make-cd (title artist rating ripped)
  (list :title title :artist artist :rating rating :ripped))
(defvar *db* nil)
(defun add-record (cd) (push cd *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))
(defun dump-db ()
  (dolist (cd *db*)
   (format t "~{~a:~10t~a~%~}~%" cd)))

(dump-db)

我明白了

TITLE:    Home
ARTIST:   Dixie Chicks
RATING:   9
RIPPED:   
*** - There are not enough arguments left for this format directive.
      Current point in control string:
        "~{~a:~10t~a~%~}~%"
                  |

我对 format 或 LISP 的理解不够深入,无法进行故障排除。这本书说我应该得到数据库中所有记录的列表。出了什么问题?

最佳答案

首先,让我们看一下(make-cd)的返回:

[12]> (make-cd "Home" "Dixie Chicks" 9 t)
(:TITLE "Home" :ARTIST "Dixie Chicks" :RATING 9 :RIPPED)

您没有包含 :ripped 的值!将 (make-cd) 更改为:

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

注意 :ripped 之后的 ripped

关于lisp - 格式化 Practical Common LISP 的第一个练习时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13225849/

相关文章:

lisp - lisp 符号的有效字符

emacs - 在 emacs/slime 实时环境中自动重新编译

common-lisp - lisp 中的破坏性排序

小块的 Lisp。第1章

lisp - clip正数创始人

common-lisp - 当我在 LISP 中使用普通的 setf 语句时会发生什么?

common-lisp - ecase 宏中的子句采用包前缀

apache - 可以使用 Apache Tomcat 的 Lisp 方言吗?

emacs - 我如何应用新的 Emacs C 样式来重新格式化我的所有源文件?