feat: add transform

This commit is contained in:
Edward Langley
2023-07-15 10:22:38 -07:00
parent 902adc1fe0
commit 2705341bb0
3 changed files with 17 additions and 3 deletions

View File

@ -332,6 +332,13 @@
(apply #'concatenate result-type (apply #'concatenate result-type
seq))) seq)))
(defun transform (arg &rest args)
(if args
(lambda (fn)
(apply fn arg args))
(lambda (fn)
(funcall fn arg))))
(defmacro calling (fun &rest args) (defmacro calling (fun &rest args)
(alexandria:with-gensyms (first-arg) (alexandria:with-gensyms (first-arg)
`(lambda (,first-arg) `(lambda (,first-arg)

View File

@ -20,7 +20,7 @@
#:maximizing #:zipping #:applying #:splice-elt #:maximizing #:zipping #:applying #:splice-elt
#:transform-elt #:denest #:op #:defalias #:<> #:<>1 #:== #: #:transform-elt #:denest #:op #:defalias #:<> #:<>1 #:== #:
#: #:suffixp #:functionalize #:inc #:group-by #:keys #: #:suffixp #:functionalize #:inc #:group-by #:keys
#:conj #:disj #:delay #:calling)) #:conj #:disj #:delay #:transform))
(defpackage :data-lens.transducers.internals (defpackage :data-lens.transducers.internals
(:use :cl) (:use :cl)

View File

@ -275,5 +275,12 @@
(vector 0 1 2)))) (vector 0 1 2))))
(5am:is (equal "Abc" (5am:is (equal "Abc"
(funcall (data-lens:transform-elt 0 'char-upcase) (funcall (data-lens:transform-elt 0 'char-upcase)
"abc"))) "abc"))))
)
(5am:def-test transform (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal (funcall (data-lens:transform 1) #'1+)
2))
(5am:is (equal (funcall (data-lens:transform 1)
(data-lens:juxt '1- 'identity '1+))
'(0 1 2))))