(setq *print-circle* T)
;; then create some list with a large number of items, of which a bunch
;; of them repeat
如果您随后尝试打印 repl 中的列表,您将看到很多不熟悉的文本。您的每个项目(在开始时)都会显示#1 或#2 等,具体取决于列表中的项目位置。如果列表重复,则不会打印出项目,而是 #1# #2# 等,具体取决于列表重复的项目。这让我很震惊,因为我没想到会这样。我不确定是否有一种方法可以标记列表,这样当您在 repl 中打印对象时它就不会执行此行为。
列表中没有任何内容被修改,只是其表示方式发生了变化。
我解决这个问题的方法是 defun 一个函数来连接单个字符串中的列表项,这强制了列表项的扩展。
(defun join-list-items( list )
"joins all items in a list as one big string"
(format nil "~{~a~}" list))
这并不是一个真正的问题,更多的是一个警告,如果您不熟悉 SBCL 如何处理具有重复项目的列表的 repl 打印(如果设置了 print-circle),那么“这里有龙”。