Browse code
Add composition operators and defalias/op
Ed Langley authored on 26/04/2019 00:40:37
Showing 1 changed files
Showing 1 changed files
... | ... |
@@ -1,11 +1,13 @@ |
1 | 1 |
(defpackage :data-lens |
2 | 2 |
(:use :cl) |
3 |
+ (:import-from #:serapeum #:op #:defalias) |
|
3 | 4 |
(:export #:regex-match #:include #:exclude #:pick #:key-transform |
4 | 5 |
#:combine #:derive #:cumsum #:over #:on #:shortcut #:defun-ct #:key |
5 | 6 |
#:extract-key #:element #:let-fn #:juxt #:transform-tail #:slice |
6 | 7 |
#:compress-runs #:combine-matching-lists #:sorted #:applicable-when |
7 | 8 |
#:of-length #:of-min-length #:of-max-length #:transform-head |
8 |
- #:maximizing #:zipping #:applying #:transform-elt #:denest)) |
|
9 |
+ #:maximizing #:zipping #:applying #:transform-elt #:denest #:op |
|
10 |
+ #:defalias #:<> #:<>1)) |
|
9 | 11 |
(in-package :data-lens) |
10 | 12 |
|
11 | 13 |
(declaim |
... | ... |
@@ -279,3 +281,17 @@ |
279 | 281 |
(funcall (zipping 'vector) |
280 | 282 |
it |
281 | 283 |
(alexandria:iota it-length)))))))) |
284 |
+ |
|
285 |
+(defmacro <> (arity &rest funs) |
|
286 |
+ (let ((arg-syms (loop repeat arity collect (gensym)))) |
|
287 |
+ `(lambda (,@arg-syms) |
|
288 |
+ (declare (dynamic-extent ,@arg-syms)) |
|
289 |
+ ,(fw.lu:rollup-list (mapcar (lambda (x) |
|
290 |
+ (etypecase x |
|
291 |
+ (list `(funcall ,x)) |
|
292 |
+ (symbol (list x)))) |
|
293 |
+ funs) |
|
294 |
+ arg-syms)))) |
|
295 |
+ |
|
296 |
+(defmacro <>1 (&rest funs) |
|
297 |
+ `(<> 1 ,@funs)) |