keep functional seq (pointer) definition in separate file for reference

This commit is contained in:
Helmut Merz 2024-05-20 12:22:05 +02:00
parent 8e5317810b
commit f3c44f7baf

50
forge/seq-functional.lisp Normal file
View file

@ -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)