-1

「サイクリック」リストを使用する必要があるlispから宿題が出されました(これの正しい名前はわかりません)。「循環」リストとは、リストを意味します。cdr最後の1つの短所は、同じリストの最初のリストを指します。

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

私たちはそのようなリストを作成するように教えられてきました:

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

私が使っているLispソフトウェア(Lispbox)はこの種のリストをサポートしていません。Debianでもclispを試しましたが、そのようなリストを作成した後にクラッシュしました。

これをサポートするLisp実装を知っていますか(フリーウェア、OSに依存しない)?

4

1 に答える 1

7

を含むすべてのlisp実装は、循環リストclispをサポートします。

「クラッシュ」とは、スタックオーバーフローエラー(またはメモリ不足エラー)を意味します。これは、循環を印刷しようとすると常に発生します(「read-eval-PRINT」ループを覚えていますか?)。の場合*print-circle*の構造niltLispに#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#)

関数LIST-LENGTHも参照してください。

于 2013-03-21T00:03:01.113 に答える