【问题标题】:I want to make circular list with common lisp [duplicate]我想用普通的 lisp 制作循环列表 [重复]
【发布时间】:2016-08-12 10:51:12
【问题描述】:

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

lambda (x) (cons (car x) (cons (rplacd (cdr x) (car x))))

我编写了上面的代码,但我认为这不是我想要的。 如何制作循环列表?

【问题讨论】:

    标签: common-lisp


    【解决方案1】:

    首先,当你尝试打印一个循环对象并且*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 ...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 2013-03-10
      • 2021-08-31
      • 1970-01-01
      • 2019-01-04
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多