Thomas on Nostr: npub18nexv…u2mm9 Every functional-minded Lisper has these two classics in a file of ...
npub18nexvs44uwvzhjlp3x3ua3f4n8npw45krta6nv9u5rkddecwnfqqlu2mm9 (npub18ne…2mm9) Every functional-minded Lisper has these two classics in a file of utilities:
(defun compose (proc &rest procs)
"Single value passing internally between procs"
(let* ((procs (reverse (cons proc procs)))
(proc1 (car procs))
(more (cdr procs)))
#'(lambda (&rest args)
(let ((value (apply proc1 args)))
(dolist (proc more)
(setq value (funcall proc value)))
value))))
(defun compose* (proc &rest procs)
"Multiple value passing internally between procs, via returned lists"
(let* ((procs (reverse (cons proc procs)))
(proc1 (car procs))
(more (cdr procs)))
#'(lambda (&rest args)
(let ((value (apply proc1 args)))
(dolist (proc more)
(setq value (apply proc value)))
value))))
Emacs Lisp is a very old-fashioned Lisp, and not even a particularly good example of an old-fashioned Lisp. But, it gets the job done, and is easily extended.
(defun compose (proc &rest procs)
"Single value passing internally between procs"
(let* ((procs (reverse (cons proc procs)))
(proc1 (car procs))
(more (cdr procs)))
#'(lambda (&rest args)
(let ((value (apply proc1 args)))
(dolist (proc more)
(setq value (funcall proc value)))
value))))
(defun compose* (proc &rest procs)
"Multiple value passing internally between procs, via returned lists"
(let* ((procs (reverse (cons proc procs)))
(proc1 (car procs))
(more (cdr procs)))
#'(lambda (&rest args)
(let ((value (apply proc1 args)))
(dolist (proc more)
(setq value (apply proc value)))
value))))
Emacs Lisp is a very old-fashioned Lisp, and not even a particularly good example of an old-fashioned Lisp. But, it gets the job done, and is easily extended.