Add functions for transforming arbitrary elements and applying functions

This commit is contained in:
Ed Langley
2018-12-31 04:27:07 -08:00
parent 18dbfba4dc
commit bd1882ec7d
2 changed files with 16 additions and 1 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
*.fasl *.fasl
*.*x*fsl
*~

View File

@ -20,7 +20,9 @@
#:of-max-length #:of-max-length
#:transform-head #:transform-head
#:maximizing #:maximizing
#:zipping)) #:zipping
#:applying
#:transform-elt))
(in-package :data-lens) (in-package :data-lens)
(declaim (declaim
@ -163,6 +165,12 @@
(list* (car it) (list* (car it)
(funcall fun (cdr it))))) (funcall fun (cdr it)))))
(defun-ct transform-elt (elt fun)
(lambda (it)
(append (subseq it 0 elt)
(funcall fun (nth elt it))
(subseq it (1+ elt)))))
(defun-ct key-transform (fun key-get key-set) (defun-ct 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)))
@ -214,6 +222,11 @@
(lambda (seq) (lambda (seq)
(map result-type fun seq))) (map result-type fun seq)))
(defmacro applying (fun &rest args)
(alexandria:with-gensyms (seq)
`(lambda (,seq)
(apply ,fun ,@args ,seq))))
(defun-ct on (fun key) (defun-ct on (fun key)
(lambda (it) (lambda (it)
(funcall fun (funcall key it)))) (funcall fun (funcall key it))))