Common Lisp的新手,无法理解为什么在简单情况下defun函数不起作用

时间:2018-12-15 13:17:28

标签: common-lisp practical-common-lisp

在“实践通用Lisp”的第3章中,要求我们通过创建函数make-cd来创建CD数据库,该函数定义如下:

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

在我的REPL(使用SLIME)中,这似乎是按计划进行的……直到我开始向数据库中添加一个值,例如

(make-cd "Roses" "Kathy Mattea" 7 t)
(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)

然后我收到以下错误消息

Undefined function :TITLE called with arguments ("Roses"
                                             :ARTIST
                                             "Kathy Mattea"
                                             :RATING
                                             7
                                             :RIPPED
                                             T) .
   [Condition of type CCL::UNDEFINED-FUNCTION-CALL]

这段代码是按字符排列的,本书中写着,没有注释说明错误或此错误的含义。

我是Lisp的新手,不知道这里出了什么问题!

1 个答案:

答案 0 :(得分:7)

在书中向数据库添加条目的说明是:

CL-USER> (make-cd "Roses" "Kathy Mattea" 7 t)

CL-USER>是REPL的提示,然后是您的输入。

下一行不是以提示符开头,而是指示函数调用返回的输出:

(:TITLE "Roses" :ARTIST "Kathy Mattea" :RATING 7 :RIPPED T)

您应该只输入第一行,然后确认您获得的输出与第二行匹配。