我在代码中使用了很多循环列表,并且希望*print-circle*
在文件加载时自动设置为t
。我将行(setf *print-circle* t)
添加到我的文件中,并认为这会有所帮助。
但是,当我使用Cc Ck将文件加载到SLIME时,这似乎不起作用 - 如果我尝试使用加载的代码打印循环列表,则REPL会被抛入无限循环除非我手动在加载后将(setf *print-circle* t)
输入REPL。我不确定为什么会发生这种情况 - 我开始使用正确的包装和SLIME后才开始出现这种行为。
对于记录,我的包声明(以及我认为可能相关的任何其他内容)如下:
(eval-when (:compile-toplevel :load-toplevel :execute)
(ql:quickload "priority-queue")
(load "utilities.fasl")) ;;to avoid compilation issues
(defpackage :tournament
(:use :cl :priority-queue :utilities))
(in-package :tournament)
(setf *print-circle* t) ;should work, but doesn't
我错过了什么?
答案 0 :(得分:2)
您需要将*print-circle*
的设置包含在eval-when
:
(eval-when (:load-toplevel :execute)
(setq *print-circle* t))