Implement $ operator, second class version of the applicative operator

The `$` operator takes a sequence of FORMS and returns a unary
function which applies the input through that sequence via the `->>`
operator.

For example, consider the predicate "not null".  `null` is built into
Common Lisp but "not null" requires writing a
function (lambda (x) (not (null x))).  Now, using this operator, you
can write ($ not null) which returns the same lambda as above while
being more concise.
This commit is contained in:
2025-02-10 07:14:05 +00:00
parent c5d9888641
commit b29855047b
2 changed files with 8 additions and 1 deletions

View File

@@ -77,3 +77,9 @@ arguments `LAMBDA-LIST' with body `BODY'."
(declaim (ftype ,type ,name))
(defun ,name ,lambda-list
,@body)))
(defmacro $ (&rest forms)
"Given a sequence of FORMS, return a unary function which applies each form
sequentially"
`(lambda (x)
(->> x ,@forms)))

View File

@@ -22,7 +22,8 @@
(:export
:_ :--> :->>
:while
:-> :fn))
:-> :fn
:$))
(defpackage lib.functions
(:use :cl :lib.macros)