feat: calling and calling*

This commit is contained in:
Edward Langley
2023-07-15 10:27:36 -07:00
parent 40db934151
commit e833e39e87
3 changed files with 19 additions and 1 deletions

View File

@ -344,6 +344,11 @@
`(lambda (,first-arg)
(funcall (functionalize ,fun) ,first-arg ,@args))))
(defmacro calling* (fun &rest args)
(alexandria:with-gensyms (last-arg)
`(lambda (,last-arg)
(funcall (functionalize ,fun) ,@args ,last-arg))))
(defmacro applying (fun &rest args)
(alexandria:with-gensyms (seq fsym)
`(let ((,fsym (functionalize ,fun)))

View File

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

View File

@ -284,3 +284,15 @@
(5am:is (equal (funcall (data-lens:transform 1)
(data-lens:juxt '1- 'identity '1+))
'(0 1 2))))
(5am:def-test calling (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal (funcall (data-lens:calling #'- 1) 3)
2))
(5am:is (equal (funcall (data-lens:calling #'- 2 1) 3)
0)))
(5am:def-test calling* (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal (funcall (data-lens:calling* #'- 3) 1)
2))
(5am:is (equal (funcall (data-lens:calling* #'- 3 2) 1)
0)))