Lisp循环列表

Buk*_*ksy -1 lisp list common-lisp circular-list

我们已经从lisp获得了作业,我需要使用"循环"列表(我不知道这是什么命名).通过"循环"列表,我的意思是列表,cdr最后一个cons的哪一个指向同一列表中的第一个.

(Value1 . PointerValue2) (Value2 . PointerValue3) (Value3 . PointerValue1)
Run Code Online (Sandbox Code Playgroud)

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

(defun cykl (l)
  (setf (cdr (last l)) l)
)
Run Code Online (Sandbox Code Playgroud)

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

你知道哪些lisp实现支持这个(免费软件,os独立)?

sds*_*sds 7

所有lisp实现,包括clisp支持循环列表.

当你说"崩溃"时,你可能意味着堆栈溢出错误(或内存不足错误),当你尝试打印(记住'read-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#)
Run Code Online (Sandbox Code Playgroud)

另请参见功能LIST-LENGTH