Browse code
feat: generalize transform-elt to sequences
Edward Langley authored on 15/07/2023 17:17:02
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -225,9 +225,10 @@ |
225 | 225 |
|
226 | 226 |
(defun transform-elt (elt fun) |
227 | 227 |
(lambda (it) |
228 |
- (append (subseq it 0 elt) |
|
229 |
- (list (funcall fun (nth elt it))) |
|
230 |
- (subseq it (1+ elt))))) |
|
228 |
+ (concatenate (type-of it) |
|
229 |
+ (subseq it 0 elt) |
|
230 |
+ (list (funcall fun (elt it elt))) |
|
231 |
+ (subseq it (1+ elt))))) |
|
231 | 232 |
|
232 | 233 |
(defun key-transform (fun key-get key-set) |
233 | 234 |
(lambda (it) |
... | ... |
@@ -259,3 +259,18 @@ |
259 | 259 |
(5am:is (equalp #(1 2 3) |
260 | 260 |
(funcall (data-lens:over '1+ :result-type 'vector) |
261 | 261 |
#(0 1 2))))) |
262 |
+ |
|
263 |
+(5am:def-test transform-elt (:suite :data-lens.lens :depends-on (and functionalize)) |
|
264 |
+ (5am:is (equal '(1 1 2) |
|
265 |
+ (funcall (data-lens:transform-elt 0 '1+) |
|
266 |
+ '(0 1 2)))) |
|
267 |
+ (5am:is (equal '(0 2 2) |
|
268 |
+ (funcall (data-lens:transform-elt 1 '1+) |
|
269 |
+ '(0 1 2)))) |
|
270 |
+ (5am:is (equalp #(0 1 3) |
|
271 |
+ (funcall (data-lens:transform-elt 2 '1+) |
|
272 |
+ (vector 0 1 2)))) |
|
273 |
+ (5am:is (equal "Abc" |
|
274 |
+ (funcall (data-lens:transform-elt 0 'char-upcase) |
|
275 |
+ "abc"))) |
|
276 |
+ ) |