当结构相互指向时无限打印

问题描述 投票:0回答:1

我正在用 common lisp (sbcl) 编写一个双向链表的插入函数,并将两个节点设置为彼此指向,导致结果以无限循环的方式打印。为什么?是什么原因导致节点无限打印呢?我如何防止对象以这种方式打印?

这是一个最小的示例(全局变量用于使事情变得简单)。

(defstruct node
  data
  next
  prev)

(defparameter *new* (make-node :data "hello"))
(defparameter *original* (make-node :data "world"))

(setf (node-prev *original*) *new*) ;; Prints fine.
(setf (node-next *new*) *original*) ;; INFINITE LOOP WHEN PRINTING!!!
common-lisp sbcl
1个回答
0
投票

很明显吗? “设置两个节点相互指向”-> 它是圆形的。

使用

cl:*print-circle*
设置为 T:

CL-USER 53 > (setf *print-circle* t)
T

CL-USER 54 > (setf (node-next *new*) *original*)
#1=#S(NODE :DATA "world"
           :NEXT NIL
           :PREV #S(NODE :DATA "hello" :NEXT #1# :PREV NIL))
© www.soinside.com 2019 - 2024. All rights reserved.