(in-package :collection-class)
(defclass collection-iterator (for:iterator)
())
(defmethod initialize-instance :after ((iterator collection-iterator) &key object)
(setf (for:object iterator)
(items object)))
(defmethod for:has-more ((iterator collection-iterator))
(not (null (for:object iterator))))
(defmethod for:next ((iterator collection-iterator))
(let ((collection-items (for:object iterator)))
(prog1 (car collection-items)
(setf (for:object iterator)
(cdr collection-items)))))
(defmethod for:make-iterator ((collection collection) &key)
(make-instance 'collection-iterator :object collection))
|