keep functional seq (pointer) definition in separate file for reference
This commit is contained in:
parent
8e5317810b
commit
f3c44f7baf
1 changed files with 50 additions and 0 deletions
50
forge/seq-functional.lisp
Normal file
50
forge/seq-functional.lisp
Normal 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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue