2013-03-20 92 views
-3

我們已經從lisp那裏得到了家庭作業,我需要使用「循環」列表(我不知道什麼是正確的命名)。 「循環」列表,我的意思是列表,其中最後一個cons的cdr指向同一列表中的第一個列表。Lisp循環列表

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

我們被教導要以創建這樣一個列表:

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

Lisp的軟件(Lispbox)我用不支持這種名單。我也在Debian上嘗試過clisp,但創建這樣的列表後它已經崩潰。

你知道什麼lisp實現支持這個(免費的,獨立於操作系統)?

回答

7

所有lisp實現,包括clisp,支持。

當你說「崩潰」,你可能指的是stack overflow error(或內存不足的錯誤),這當您嘗試打印(還記得「讀-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