在Linux中运行sbcl 1.3.7,我有一个对象有一个有意为循环列表的插槽,遵循Rainer Joswig 在Common Lisp中的循环列表中的建议和一个旨在成为正确列表的全局变量(不打算是圆).
(setf *print-circle* t)
(defun circular (items)
(setf (cdr (last items)) items)
items)
(defclass circular ()
((items :accessor items :initarg :items)))
(defmethod initialize-instance :after ((c circular) &rest initargs)
(setf (slot-value c 'items)
(circular (slot-value c 'items))))
(defmethod next-item ((c circular))
(prog1 (first (slot-value c 'items))
(setf (slot-value c 'items)
(rest (slot-value c 'items)))))
(defparameter *notes* (make-instance 'circular :items '(A A# B C C# D D# E F F# G G#)))
(defparameter *stuff1* '(A …Run Code Online (Sandbox Code Playgroud)