Common lisp 我想用CommonLisp制作循环列表

Common lisp 我想用CommonLisp制作循环列表,common-lisp,Common Lisp,我想使用rplaca或rplacd使用common lisp制作循环列表 lambda (x) (cons (car x) (cons (rplacd (cdr x) (car x)))) 我编写了上面这样的代码,但我认为这不是我想要的。 如何制作循环列表?首先,当您尝试打印循环对象时,堆栈总是溢出,并且为零。那么,从 (setq *print-circle* t) 现在,有许多方法可以创建循环列表: (defparameter *my-circular-list* (list t)) (s

我想使用rplaca或rplacd使用common lisp制作循环列表

lambda (x) (cons (car x) (cons (rplacd (cdr x) (car x))))
我编写了上面这样的代码,但我认为这不是我想要的。
如何制作循环列表?

首先,当您尝试打印循环对象时,堆栈总是溢出,并且
为零。那么,从

(setq *print-circle* t)
现在,有许多方法可以创建循环列表:

(defparameter *my-circular-list* (list t))
(setf (cdr *my-circular-list*) *my-circular-list*)
==> #1=(T . #1#)
请注意列表是如何使用的,以便可以:

警告:
(相等*我的循环列表**my-circular-list-1*)
将挂起,因为它将无限下降到循环结构中

您也可以尝试以下方法:

(setq *print-circle* nil
      *print-length* 4)
(print '#1=(a . #1#))
==> (A A A A ...)
(setq *print-length* 10)
(print '#1=(a . #1#))
==> (A A A A A A A A A A ...)

首先,当您尝试打印循环对象时,总是会出现堆栈溢出,并且
nil
。那么,从

(setq *print-circle* t)
现在,有许多方法可以创建循环列表:

(defparameter *my-circular-list* (list t))
(setf (cdr *my-circular-list*) *my-circular-list*)
==> #1=(T . #1#)
请注意列表是如何使用的,以便可以:

警告:
(相等*我的循环列表**my-circular-list-1*)
将挂起,因为它将无限下降到循环结构中

您也可以尝试以下方法:

(setq *print-circle* nil
      *print-length* 4)
(print '#1=(a . #1#))
==> (A A A A ...)
(setq *print-length* 10)
(print '#1=(a . #1#))
==> (A A A A A A A A A A ...)