Rewrote --> to take a placeholder symbol as first argument
Instead of exporting cantedraw.lib.macro._ and making anyone who wants to use the --> macro _require_ importing that specific symbol, let's just make it so the user has to supply a placeholder name before they do anything. This means each package provides its own placeholder symbol which lowers coupling.
This commit is contained in:
@@ -19,31 +19,31 @@
|
||||
|
||||
(in-package :cantedraw.lib.macros)
|
||||
|
||||
(defmacro --> (&rest forms)
|
||||
"Lexically bind current form as `_' for use in the next form, returning the
|
||||
result of the last form.
|
||||
(defmacro --> (placeholder &body forms)
|
||||
"Lexically bind current form as `placeholder' for use in the next form, returning
|
||||
the result of the last form.
|
||||
|
||||
i.e.
|
||||
|
||||
(--> (a1 a2...) (b1 b2...) (c1 c2...)) =
|
||||
(let* ((_ (a1 a2 ...))
|
||||
(_ (b1 b2 ...))
|
||||
(_ (c1 c2 ...)))
|
||||
(let* ((placeholder (a1 a2 ...))
|
||||
(placeholder (b1 b2 ...))
|
||||
(placeholder (c1 c2 ...)))
|
||||
_ )
|
||||
|
||||
Also includes transformer where symbols are considered unary functions i.e.
|
||||
(--> x y) <-> (--> x (y _)).
|
||||
(--> x y) <-> (--> x (y placeholder)).
|
||||
"
|
||||
(if (null forms)
|
||||
nil
|
||||
(let ((assignment-forms
|
||||
(loop :for f :in forms
|
||||
:for canon-f := (if (symbolp f)
|
||||
(list f 'cantedraw.lib.macros:_)
|
||||
(list f placeholder)
|
||||
f)
|
||||
:collect `(cantedraw.lib.macros:_ ,canon-f))))
|
||||
:collect `(,placeholder ,canon-f))))
|
||||
`(let* ,assignment-forms
|
||||
cantedraw.lib.macros:_))))
|
||||
,placeholder))))
|
||||
|
||||
(defmacro ->> (&rest forms)
|
||||
"Make current form the last argument of the next form, returning the last
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
inp))
|
||||
|
||||
(defun start ()
|
||||
(--> (read-until-integers)
|
||||
(cons '+ _)
|
||||
(format t "~a = ~a~%" _ (eval _))))
|
||||
(--> var
|
||||
(read-until-integers)
|
||||
(cons '+ var)
|
||||
(format t "~a = ~a~%" var (eval var))))
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
(defpackage cantedraw.lib.macros
|
||||
(:use :cl)
|
||||
(:export
|
||||
:_ :--> :->>
|
||||
:--> :->>
|
||||
:-> :fn
|
||||
:while :alist-val
|
||||
:$))
|
||||
|
||||
Reference in New Issue
Block a user