;;; cl-scopes/forge/seq-functioinal.list ;;; a functional closure-based implementation of ;;; sequence with three pointers ;;; not used, stored here for later reference (defun make-seq () (let* ((start (list nil)) (cur start) (end start) (args (list start cur end))) #'(lambda (fn) (setf args (apply fn args))))) (defun seq-all (seq) (let (rv) (funcall seq #'(lambda (start cur end) (setf rv (cdr start)) (list start cur end))) rv)) (defun seq-cur (seq) (let (rv) (funcall seq #'(lambda (start cur end) (setf rv (car cur)) (list start cur end))) rv)) (defun seq-end (seq) (let (rv) (funcall seq #'(lambda (start cur end) (setf rv (car end)) (list start cur end))) rv)) (defun seq-next (seq) (let (rv) (funcall seq #'(lambda (start cur end) (pop cur) (setf rv (car cur)) (list start cur end))) rv)) (defun seq-add (seq v) (funcall seq #'(lambda (start cur end) (setf (cdr end) (list v)) (pop end) (list start cur end))) nil)