【问题标题】:Lisp cyclic lists [closed]Lisp 循环列表
【发布时间】:2013-03-10 07:34:44
【问题描述】:

我们从 lisp 得到了作业,我需要使用“循环”列表(我不知道什么是正确的命名)。 “循环”列表是指列表,其中最后一个 cons 的 cdr 指向同一列表的第一个。

(Value1 . PointerValue2) (Value2 . PointerValue3) (Value3 . PointerValue1)

我们被教导要创建这样的列表:

(defun cykl (l)
  (setf (cdr (last l)) l)
)

我使用的 Lisp 软件(Lispbox)不支持这种列表。我也在 Debian 上尝试过 clisp,但在创建这样一个列表后它崩溃了。

您知道哪些支持此功能的 lisp 实现(免费软件,独立于操作系统)?

【问题讨论】:

    标签: list lisp common-lisp circular-list


    【解决方案1】:

    所有 lisp 实现,包括clisp,都支持circular lists

    当您说“崩溃”时,您可能指的是 stack overflow error(或内存不足错误),当您尝试 print 时总会遇到这种情况(记住“读取-eval-PRINT' 循环?)当*print-circle*nil 时的循环结构。将其设置为 t 会强制 Lisp 使用 #n# 表示法:

    [1]> (defparameter l (list 1 2 3))
    L
    [2]> l
    (1 2 3)
    [3]> (setq *print-circle* t)
    T
    [4]> (setf (cdr (last l)) l)
    #1=(1 2 3 . #1#)
    

    另见function LIST-LENGTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多