git.fiddlerwoaroof.com
Browse code

feat: add transform

Edward Langley authored on 15/07/2023 17:22:38
Showing 3 changed files
... ...
@@ -332,6 +332,13 @@
332 332
     (apply #'concatenate result-type
333 333
            seq)))
334 334
 
335
+(defun transform (arg &rest args)
336
+  (if args
337
+      (lambda (fn)
338
+        (apply fn arg args))
339
+      (lambda (fn)
340
+        (funcall fn arg))))
341
+
335 342
 (defmacro calling (fun &rest args)
336 343
   (alexandria:with-gensyms (first-arg)
337 344
     `(lambda (,first-arg)
... ...
@@ -20,7 +20,7 @@
20 20
            #:maximizing #:zipping #:applying #:splice-elt
21 21
            #:transform-elt #:denest #:op #:defalias #:<> #:<>1 #:== #:•
22 22
            #:∘ #:suffixp #:functionalize #:inc #:group-by #:keys
23
-           #:conj #:disj #:delay #:calling))
23
+           #:conj #:disj #:delay #:transform))
24 24
 
25 25
 (defpackage :data-lens.transducers.internals
26 26
   (:use :cl)
... ...
@@ -275,5 +275,12 @@
275 275
                            (vector 0 1 2))))
276 276
   (5am:is (equal "Abc"
277 277
                  (funcall (data-lens:transform-elt 0 'char-upcase)
278
-                          "abc")))
279
-  )
278
+                          "abc"))))
279
+
280
+(5am:def-test transform (:suite :data-lens.lens :depends-on (and functionalize))
281
+  (5am:is (equal (funcall (data-lens:transform 1) #'1+)
282
+                 2))
283
+
284
+  (5am:is (equal (funcall (data-lens:transform 1)
285
+                          (data-lens:juxt '1- 'identity '1+))
286
+                 '(0 1 2))))