在玩图表时,我遇到了一个我不太理解的奇怪错误。下面的代码重现了该问题。
;; Define struct to store a node with links to other nodes.
(defstruct node properties links)
;; Make two nodes
(setf a (make-node :properties '(:name a))
b (make-node :properties '(:name b)))
;; Create link from b to a. This works fine...
(push b (node-links a))
;; ... but this crosslink makes lisp chase its own tail for a while and then crash with a stack overflow.
(push a (node-links b))
我使用 SBCL 和 Clozure 得到了相同的结果。设置*print-length*
为可管理的值不起作用。
所以我的问题是:为什么这段代码不创建与循环列表相同的无限打印循环(即,没有堆栈溢出并且可以使用 Ctrl-C 停止)。任何输入表示赞赏。
谢谢,保罗