You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Common Lisp设置*print-circle*为T引发特殊打印,如何禁用该行为?

解决Lisp中print-circle引发的重复元素标记问题

当你开启*print-circle*为T后,Lisp的REPL会检测列表中的重复对象(基于eq判断),用#n和#n#的标记来避免重复打印相同内容,但如果只想让特定列表打印时不出现这种标记,可以用以下两种方法:

方法一:临时关闭print-circle打印目标列表

通过let临时覆盖全局的*print-circle*值,只在打印目标列表时关闭循环标记功能,不影响全局设置:

(let ((*print-circle* nil))
  (print your-target-list))

方法二:创建列表的副本

*print-circle*是通过对象的同一性来识别重复元素的,你可以为目标列表创建一个新的副本(浅拷贝或深拷贝),副本的元素和原列表元素不再是同一个对象,打印时就不会触发标记:

  • 浅拷贝(适用于单层列表):
(setq copied-list (copy-list your-target-list))
(print copied-list)
  • 深拷贝(适用于嵌套列表):
(setq copied-list (copy-tree your-target-list))
(print copied-list)

注意:如果原列表包含循环引用(比如列表自身引用自己),临时关闭*print-circle*可能导致REPL无限打印,这种情况建议优先使用副本方法。

内容的提问来源于stack exchange,提问作者JEPrice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:40:54