Browse code
feat: add transform
Edward Langley authored on 15/07/2023 17:22:38
Showing 3 changed files
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)))) |