【发布时间】:2016-08-12 10:51:12
【问题描述】:
我想用 rplaca 或 rplacd 用 common lisp 制作循环列表。
lambda (x) (cons (car x) (cons (rplacd (cdr x) (car x))))
我编写了上面的代码,但我认为这不是我想要的。 如何制作循环列表?
【问题讨论】:
标签: common-lisp
我想用 rplaca 或 rplacd 用 common lisp 制作循环列表。
lambda (x) (cons (car x) (cons (rplacd (cdr x) (car x))))
我编写了上面的代码,但我认为这不是我想要的。 如何制作循环列表?
【问题讨论】:
标签: common-lisp
首先,当你尝试打印一个循环对象并且*print-circle* 是nil 时,你总是会遇到堆栈溢出。所以,从
(setq *print-circle* t)
现在,有很多方法可以创建循环列表:
(defparameter *my-circular-list* (list t))
(setf (cdr *my-circular-list*) *my-circular-list*)
==> #1=(T . #1#)
注意circular 列表是printed 和#=,所以它可以是read:
(defparameter *my-circular-list-1* '#1=(t . #1#))
警告:(equal *my-circular-list* *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 ...)
【讨论】: