From 3eca0d0c19736b876a18c66814252d72007efc83 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Sun, 19 May 2024 10:30:45 +0200 Subject: [PATCH] forge sequence: improvements --- forge/forge.lisp | 39 +++++++++++++++++---------------------- test/test-forge.lisp | 2 +- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/forge/forge.lisp b/forge/forge.lisp index 7a80a37..02a38c9 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -6,7 +6,7 @@ (:use :common-lisp) (:export #:*forge-env* #:forge-env #:dstack #:exec #:exec-str #:repl - #:make-seq #:seq-all #:seq-cur #:seq-end #:seq-add)) + #:make-seq #:seq-all #:seq-cur #:seq-next #:seq-end #:seq-add)) (in-package :scopes/forge) @@ -120,36 +120,31 @@ (defun make-seq () (let* ((start (list nil)) (p-cur (list start)) - (p-end (list start))) + (p-end (list start)) + (args (list p-cur p-end start))) #'(lambda (fn) - (funcall fn start p-cur p-end)))) + (funcall fn args)))) (defun seq-all (seq) - (funcall seq #'(lambda (start cur end) - (declare (ignore cur) (ignore end)) - start))) + (funcall seq #'(lambda (args) + (cdr (third args))))) (defun seq-cur (seq) - (funcall seq #'(lambda (start p-cur end) - (declare (ignore start) (ignore end)) - (car (car p-cur))))) + (funcall seq #'(lambda (args) + (car (car (first args)))))) + +(defun seq-next (seq) + (funcall seq #'(lambda (args) + (pop (car (first args))) + (seq-cur seq)))) (defun seq-end (seq) - (funcall seq #'(lambda (start cur p-end) - (declare (ignore start) (ignore cur)) - (car (car p-end))))) + (funcall seq #'(lambda (args) + (car (car (second args)))))) (defun seq-add (seq v) - (funcall seq #'(lambda (start cur p-end) - (declare (ignore cur)) - (add-to-sequence v start p-end)))) - -(defun add-to-sequence (v start p-end) - (if (car start) - (progn - (setf (cdr (car p-end)) (list v)) - (pop (car p-end))) - (setf (car start) v))) + (funcall seq #'(lambda (args) + (add-to-seq v (second args))))) (defun add-to-seq (v p-end) (setf (cdr (car p-end)) (list v)) diff --git a/test/test-forge.lisp b/test/test-forge.lisp index 4a17eca..4a14e31 100644 --- a/test/test-forge.lisp +++ b/test/test-forge.lisp @@ -26,7 +26,7 @@ (let ((seq (forge:make-seq))) (forge:seq-add seq 1) (forge:seq-add seq 2) - (== (forge:seq-cur seq) 1) + (== (forge:seq-next seq) 1) (== (forge:seq-end seq) 2))) (defun test-exec ()