Lisp (a(b.c)d)在方框符号中的正确表示是什么?

Lisp (a(b.c)d)在方框符号中的正确表示是什么?,lisp,common-lisp,Lisp,Common Lisp,我正在做Paul Graham的ANSI Common Lisp中的练习。我有一把其他人练习的钥匙,那就是: 在完成了第三章的练习后,我参考那把钥匙逐一检查我的答案。当谈到(a(b.c)d)时,我发现我无法理解Shido的答案,即: 真正让我困惑的是,在他的回答中,d后面没有紧跟着nil 那么他的答案正确吗?(a(b.c)d)的正确表述是什么?回答此类问题的方法是让系统为您解答。不幸的是,正确地做到这一点需要理解CL打印系统是如何工作的,这并不是那么简单(事实上:我已经忘记了如何正确地做到这

我正在做Paul Graham的ANSI Common Lisp中的练习。我有一把其他人练习的钥匙,那就是:

在完成了第三章的练习后,我参考那把钥匙逐一检查我的答案。当谈到
(a(b.c)d)
时,我发现我无法理解Shido的答案,即:

真正让我困惑的是,在他的回答中,
d
后面没有紧跟着
nil


那么他的答案正确吗?
(a(b.c)d)
的正确表述是什么?

回答此类问题的方法是让系统为您解答。不幸的是,正确地做到这一点需要理解CL打印系统是如何工作的,这并不是那么简单(事实上:我已经忘记了如何正确地做到这一点!)。但是你可以编写一个无意识的函数,它可以把东西转换成字符串,并使用对象系统以合适的方式把各种各样的东西转换成字符串。这对于不是conse但包含conse的对象不起作用,但对于简单的目的来说已经足够了:

(defgeneric thing->string (thing)
  (:method ((thing t))
   ;; any kind of thing we don't know about gets printed like this
   (format nil "~A" thing))
  (:method ((thing cons))
   ;; conses get printed like this
   (format nil "(~A . ~A)" 
           (thing->string (car thing))
           (thing->string (cdr thing)))))

现在:
(thing->string…
将回答您的问题。

回答此类问题的方法是让系统为您回答。不幸的是,正确地做到这一点需要理解CL打印系统是如何工作的,这并不是那么简单(事实上:我已经忘记了如何正确地做到这一点!)。但是你可以编写一个无意识的函数,它可以把东西转换成字符串,并使用对象系统以合适的方式把各种各样的东西转换成字符串。这对于不是conse但包含conse的对象不起作用,但对于简单的目的来说已经足够了:

(defgeneric thing->string (thing)
  (:method ((thing t))
   ;; any kind of thing we don't know about gets printed like this
   (format nil "~A" thing))
  (:method ((thing cons))
   ;; conses get printed like this
   (format nil "(~A . ~A)" 
           (thing->string (car thing))
           (thing->string (cdr thing)))))
现在:
(thing->string…
将回答您的问题。

您可以使用:

由此可以看出您的想法是正确的。

您可以使用:


从这一点你可以看出你的想法是正确的。

Shido的答案代表
(a(b.c.d)
Shido的答案代表
(a(b.c.d)