Common Lisp 设置 *print-circle* T 会导致列表压缩?

问题描述 投票:0回答:1
(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 中打印对象时它就不会执行此行为。

list read-eval-print-loop sbcl
1个回答
0
投票

列表中没有任何内容被修改,只是其表示方式发生了变化。

我解决这个问题的方法是 defun 一个函数来连接单个字符串中的列表项,这强制了列表项的扩展。

(defun join-list-items( list )
  "joins all items in a list as one big string"
  (format nil "~{~a~}" list))

这并不是一个真正的问题,更多的是一个警告,如果您不熟悉 SBCL 如何处理具有重复项目的列表的 repl 打印(如果设置了 print-circle),那么“这里有龙”。

© www.soinside.com 2019 - 2024. All rights reserved.