将文件加载到SBCL时强制* print-circle *

时间:2014-05-16 21:57:24

标签: common-lisp slime circular-list

我在代码中使用了很多循环列表,并且希望*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

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您需要将*print-circle*的设置包含在eval-when

(eval-when (:load-toplevel :execute)
  (setq *print-circle* t))