mirror of
https://github.com/fiddlerwoaroof/data-lens.git
synced 2025-11-08 10:16:32 +00:00
chore: don't use defun-ct because it's unnecessary
This commit is contained in:
62
lens.lisp
62
lens.lisp
@ -63,11 +63,11 @@
|
|||||||
when (equal key a-key) do
|
when (equal key a-key) do
|
||||||
(return (car value)))))))
|
(return (car value)))))))
|
||||||
|
|
||||||
(defun-ct == (target &key (test 'eql))
|
(defun == (target &key (test 'eql))
|
||||||
(lambda (v)
|
(lambda (v)
|
||||||
(funcall test target v)))
|
(funcall test target v)))
|
||||||
|
|
||||||
(defun-ct deduplicate (&optional (test 'eql))
|
(defun deduplicate (&optional (test 'eql))
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(remove-duplicates it :test test)))
|
(remove-duplicates it :test test)))
|
||||||
|
|
||||||
@ -93,29 +93,29 @@
|
|||||||
(lambda (acc next)
|
(lambda (acc next)
|
||||||
(matching-list-reducer test acc next)))
|
(matching-list-reducer test acc next)))
|
||||||
|
|
||||||
(defun-ct compress-runs (&key (collector 'cons-new) (test 'eql) (key 'identity))
|
(defun compress-runs (&key (collector 'cons-new) (test 'eql) (key 'identity))
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(nreverse
|
(nreverse
|
||||||
(reduce (funcall collector :test test :key key)
|
(reduce (funcall collector :test test :key key)
|
||||||
it
|
it
|
||||||
:initial-value ()))))
|
:initial-value ()))))
|
||||||
|
|
||||||
(defun-ct of-length (len)
|
(defun of-length (len)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(= (length it)
|
(= (length it)
|
||||||
len)))
|
len)))
|
||||||
|
|
||||||
(defun-ct of-min-length (len)
|
(defun of-min-length (len)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(>= (length it)
|
(>= (length it)
|
||||||
len)))
|
len)))
|
||||||
|
|
||||||
(defun-ct of-max-length (len)
|
(defun of-max-length (len)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(<= (length it)
|
(<= (length it)
|
||||||
len)))
|
len)))
|
||||||
|
|
||||||
(defun-ct applicable-when (fun test)
|
(defun applicable-when (fun test)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(if (funcall test it)
|
(if (funcall test it)
|
||||||
(funcall fun it)
|
(funcall fun it)
|
||||||
@ -137,16 +137,16 @@
|
|||||||
fns)))))
|
fns)))))
|
||||||
|
|
||||||
|
|
||||||
(defun-ct sorted (comparator &rest r &key key)
|
(defun sorted (comparator &rest r &key key)
|
||||||
(declare (ignore key))
|
(declare (ignore key))
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(apply #'stable-sort (copy-seq it) comparator r)))
|
(apply #'stable-sort (copy-seq it) comparator r)))
|
||||||
|
|
||||||
(defun-ct element (num)
|
(defun element (num)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(elt it num)))
|
(elt it num)))
|
||||||
|
|
||||||
(defun-ct key (key)
|
(defun key (key)
|
||||||
(lambda (map)
|
(lambda (map)
|
||||||
(declare (dynamic-extent map))
|
(declare (dynamic-extent map))
|
||||||
(extract-key map key)))
|
(extract-key map key)))
|
||||||
@ -157,19 +157,19 @@
|
|||||||
for cur = (extract-key map key) then (extract-key cur key)
|
for cur = (extract-key map key) then (extract-key cur key)
|
||||||
finally (return cur))))
|
finally (return cur))))
|
||||||
|
|
||||||
(defun-ct regex-match (regex)
|
(defun regex-match (regex)
|
||||||
(lambda (data)
|
(lambda (data)
|
||||||
(cl-ppcre:scan-to-strings regex data)))
|
(cl-ppcre:scan-to-strings regex data)))
|
||||||
|
|
||||||
(defun-ct include (pred)
|
(defun include (pred)
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(remove-if-not pred seq)))
|
(remove-if-not pred seq)))
|
||||||
|
|
||||||
(defun-ct exclude (pred)
|
(defun exclude (pred)
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(remove-if pred seq)))
|
(remove-if pred seq)))
|
||||||
|
|
||||||
(defun-ct pick (selector)
|
(defun pick (selector)
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(map 'list selector seq)))
|
(map 'list selector seq)))
|
||||||
|
|
||||||
@ -177,13 +177,13 @@
|
|||||||
(lambda (it)
|
(lambda (it)
|
||||||
(subseq it start end)))
|
(subseq it start end)))
|
||||||
|
|
||||||
(defun-ct update (thing fun &rest args)
|
(defun update (thing fun &rest args)
|
||||||
(apply fun thing args))
|
(apply fun thing args))
|
||||||
|
|
||||||
(define-modify-macro updatef (fun &rest args)
|
(define-modify-macro updatef (fun &rest args)
|
||||||
update)
|
update)
|
||||||
|
|
||||||
(defun-ct suffixp (suffix &key (test 'eql test-p))
|
(defun suffixp (suffix &key (test 'eql test-p))
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(if test-p
|
(if test-p
|
||||||
(alexandria:ends-with-subseq suffix
|
(alexandria:ends-with-subseq suffix
|
||||||
@ -192,7 +192,7 @@
|
|||||||
(alexandria:ends-with-subseq suffix
|
(alexandria:ends-with-subseq suffix
|
||||||
it))))
|
it))))
|
||||||
|
|
||||||
(defun-ct transform-head (fun)
|
(defun transform-head (fun)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(typecase it
|
(typecase it
|
||||||
(list (list* (funcall fun (car it))
|
(list (list* (funcall fun (car it))
|
||||||
@ -201,7 +201,7 @@
|
|||||||
(prog1 result
|
(prog1 result
|
||||||
(updatef (elt result 0) fun)))))))
|
(updatef (elt result 0) fun)))))))
|
||||||
|
|
||||||
(defun-ct transform-tail (fun)
|
(defun transform-tail (fun)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(typecase it
|
(typecase it
|
||||||
(list (list* (car it)
|
(list (list* (car it)
|
||||||
@ -211,25 +211,25 @@
|
|||||||
(updatef (subseq result 1)
|
(updatef (subseq result 1)
|
||||||
fun)))))))
|
fun)))))))
|
||||||
|
|
||||||
(defun-ct splice-elt (elt fun)
|
(defun splice-elt (elt fun)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(append (subseq it 0 elt)
|
(append (subseq it 0 elt)
|
||||||
(funcall fun (nth elt it))
|
(funcall fun (nth elt it))
|
||||||
(subseq it (1+ elt)))))
|
(subseq it (1+ elt)))))
|
||||||
|
|
||||||
(defun-ct transform-elt (elt fun)
|
(defun transform-elt (elt fun)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(append (subseq it 0 elt)
|
(append (subseq it 0 elt)
|
||||||
(list (funcall fun (nth elt it)))
|
(list (funcall fun (nth elt it)))
|
||||||
(subseq it (1+ elt)))))
|
(subseq it (1+ elt)))))
|
||||||
|
|
||||||
(defun-ct key-transform (fun key-get key-set)
|
(defun key-transform (fun key-get key-set)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(let ((key-val (funcall key-get it)))
|
(let ((key-val (funcall key-get it)))
|
||||||
(funcall key-set
|
(funcall key-set
|
||||||
(funcall fun key-val)))))
|
(funcall fun key-val)))))
|
||||||
|
|
||||||
(defun-ct juxt (fun1 &rest r)
|
(defun juxt (fun1 &rest r)
|
||||||
(lambda (&rest args)
|
(lambda (&rest args)
|
||||||
(list* (apply fun1 args)
|
(list* (apply fun1 args)
|
||||||
(when r
|
(when r
|
||||||
@ -249,7 +249,7 @@
|
|||||||
(prog1 (funcall fun1 i)
|
(prog1 (funcall fun1 i)
|
||||||
(funcall fun2))))
|
(funcall fun2))))
|
||||||
|
|
||||||
(defun-ct derive (diff-fun &key (key #'identity))
|
(defun derive (diff-fun &key (key #'identity))
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(typecase seq
|
(typecase seq
|
||||||
(list (cons (cons nil (car seq))
|
(list (cons (cons nil (car seq))
|
||||||
@ -270,12 +270,12 @@
|
|||||||
else collect (cons nil next))
|
else collect (cons nil next))
|
||||||
'vector)))))
|
'vector)))))
|
||||||
|
|
||||||
(defun-ct inc (inc)
|
(defun inc (inc)
|
||||||
(declare (optimize (speed 3)))
|
(declare (optimize (speed 3)))
|
||||||
(lambda (base)
|
(lambda (base)
|
||||||
(+ base inc)))
|
(+ base inc)))
|
||||||
|
|
||||||
(defun-ct cumsum
|
(defun cumsum
|
||||||
(&key (add-fun #'+) (key #'identity) (combine (lambda (x y) y x)) (zero 0))
|
(&key (add-fun #'+) (key #'identity) (combine (lambda (x y) y x)) (zero 0))
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(nreverse
|
(nreverse
|
||||||
@ -291,12 +291,12 @@
|
|||||||
seq
|
seq
|
||||||
:initial-value ()))))
|
:initial-value ()))))
|
||||||
|
|
||||||
(defun-ct over (fun &key (result-type 'list))
|
(defun over (fun &key (result-type 'list))
|
||||||
(let ((fun (functionalize fun)))
|
(let ((fun (functionalize fun)))
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(map result-type fun seq))))
|
(map result-type fun seq))))
|
||||||
|
|
||||||
(defun-ct denest (&key (result-type 'list))
|
(defun denest (&key (result-type 'list))
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(apply #'concatenate result-type
|
(apply #'concatenate result-type
|
||||||
seq)))
|
seq)))
|
||||||
@ -312,7 +312,7 @@
|
|||||||
(lambda (,seq)
|
(lambda (,seq)
|
||||||
(apply ,fsym ,@args ,seq)))))
|
(apply ,fsym ,@args ,seq)))))
|
||||||
|
|
||||||
(defun-ct on (fun key)
|
(defun on (fun key)
|
||||||
"Transform arguments with KEY and then apply FUN
|
"Transform arguments with KEY and then apply FUN
|
||||||
|
|
||||||
> (eql (funcall (on 'equal 'car)
|
> (eql (funcall (on 'equal 'car)
|
||||||
@ -329,7 +329,7 @@
|
|||||||
(make-sequence 'vector (- length2 length1) :initial-element fill-value)
|
(make-sequence 'vector (- length2 length1) :initial-element fill-value)
|
||||||
#()))
|
#()))
|
||||||
|
|
||||||
(defun-ct zipping (result-type &key (fill-value nil fill-value-p))
|
(defun zipping (result-type &key (fill-value nil fill-value-p))
|
||||||
(lambda (seq1 seq2)
|
(lambda (seq1 seq2)
|
||||||
(let ((length1 (when fill-value-p (length seq1)))
|
(let ((length1 (when fill-value-p (length seq1)))
|
||||||
(length2 (when fill-value-p (length seq2))))
|
(length2 (when fill-value-p (length seq2))))
|
||||||
@ -346,7 +346,7 @@
|
|||||||
(map result-type #'list
|
(map result-type #'list
|
||||||
seq1 seq2)))))
|
seq1 seq2)))))
|
||||||
|
|
||||||
(defun-ct maximizing (relation measure)
|
(defun maximizing (relation measure)
|
||||||
(lambda (it)
|
(lambda (it)
|
||||||
(let ((it-length (length it)))
|
(let ((it-length (length it)))
|
||||||
(when (> it-length 0)
|
(when (> it-length 0)
|
||||||
@ -361,7 +361,7 @@
|
|||||||
it
|
it
|
||||||
(alexandria:iota it-length))))))))
|
(alexandria:iota it-length))))))))
|
||||||
|
|
||||||
(defun-ct group-by (fn &key (test 'equal))
|
(defun group-by (fn &key (test 'equal))
|
||||||
(lambda (seq)
|
(lambda (seq)
|
||||||
(let ((groups (make-hash-table :test test)))
|
(let ((groups (make-hash-table :test test)))
|
||||||
(map nil
|
(map nil
|
||||||
|
|||||||
Reference in New Issue
Block a user