Browse code
Add functions for transforming arbitrary elements and applying functions
Ed Langley authored on 31/12/2018 12:27:07
Showing 2 changed files
Showing 2 changed files
... | ... |
@@ -20,7 +20,9 @@ |
20 | 20 |
#:of-max-length |
21 | 21 |
#:transform-head |
22 | 22 |
#:maximizing |
23 |
- #:zipping)) |
|
23 |
+ #:zipping |
|
24 |
+ #:applying |
|
25 |
+ #:transform-elt)) |
|
24 | 26 |
(in-package :data-lens) |
25 | 27 |
|
26 | 28 |
(declaim |
... | ... |
@@ -163,6 +165,12 @@ |
163 | 165 |
(list* (car it) |
164 | 166 |
(funcall fun (cdr it))))) |
165 | 167 |
|
168 |
+(defun-ct transform-elt (elt fun) |
|
169 |
+ (lambda (it) |
|
170 |
+ (append (subseq it 0 elt) |
|
171 |
+ (funcall fun (nth elt it)) |
|
172 |
+ (subseq it (1+ elt))))) |
|
173 |
+ |
|
166 | 174 |
(defun-ct key-transform (fun key-get key-set) |
167 | 175 |
(lambda (it) |
168 | 176 |
(let ((key-val (funcall key-get it))) |
... | ... |
@@ -214,6 +222,11 @@ |
214 | 222 |
(lambda (seq) |
215 | 223 |
(map result-type fun seq))) |
216 | 224 |
|
225 |
+(defmacro applying (fun &rest args) |
|
226 |
+ (alexandria:with-gensyms (seq) |
|
227 |
+ `(lambda (,seq) |
|
228 |
+ (apply ,fun ,@args ,seq)))) |
|
229 |
+ |
|
217 | 230 |
(defun-ct on (fun key) |
218 | 231 |
(lambda (it) |
219 | 232 |
(funcall fun (funcall key it)))) |