feat: generalize transform-elt to sequences

This commit is contained in:
Edward Langley
2023-07-15 10:17:02 -07:00
parent ea7e56385c
commit b7f020d352
2 changed files with 19 additions and 3 deletions

View File

@ -225,9 +225,10 @@
(defun transform-elt (elt fun) (defun transform-elt (elt fun)
(lambda (it) (lambda (it)
(append (subseq it 0 elt) (concatenate (type-of it)
(list (funcall fun (nth elt it))) (subseq it 0 elt)
(subseq it (1+ elt))))) (list (funcall fun (elt it elt)))
(subseq it (1+ elt)))))
(defun key-transform (fun key-get key-set) (defun key-transform (fun key-get key-set)
(lambda (it) (lambda (it)

View File

@ -259,3 +259,18 @@
(5am:is (equalp #(1 2 3) (5am:is (equalp #(1 2 3)
(funcall (data-lens:over '1+ :result-type 'vector) (funcall (data-lens:over '1+ :result-type 'vector)
#(0 1 2))))) #(0 1 2)))))
(5am:def-test transform-elt (:suite :data-lens.lens :depends-on (and functionalize))
(5am:is (equal '(1 1 2)
(funcall (data-lens:transform-elt 0 '1+)
'(0 1 2))))
(5am:is (equal '(0 2 2)
(funcall (data-lens:transform-elt 1 '1+)
'(0 1 2))))
(5am:is (equalp #(0 1 3)
(funcall (data-lens:transform-elt 2 '1+)
(vector 0 1 2))))
(5am:is (equal "Abc"
(funcall (data-lens:transform-elt 0 'char-upcase)
"abc")))
)