diff --git a/forge/seq-functional.lisp b/forge/seq-functional.lisp new file mode 100644 index 0000000..60b03cd --- /dev/null +++ b/forge/seq-functional.lisp @@ -0,0 +1,50 @@ +;;; 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) +