git.fiddlerwoaroof.com
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
... ...
@@ -1 +1,3 @@
1 1
 *.fasl
2
+*.*x*fsl
3
+*~
... ...
@@ -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))))