SA
#DEFINE if(a) if(rand())
Size: a a a
SA
#DEFINE if(a) if(rand())
SA
AE
AE
AE
AE
(defmacro puque (&rest objs)
`(+ ,@(loop :for o :in objs :collect `[,o.a])))
AE
AE
SA
(defparameter *two-arg-infix-functions* #(+ - * / (^ expt) < > <= >= = /=
eq eql equal eqluap char= char/=
string= string/= mod rem (as coerce)))
(defmacro with-2arg-infix-syntax (single-form)
(labels ((find-subs (obj)
(loop :for name :across *two-arg-infix-functions*
:if (eql name obj)
:do (return name)
:else
:if (and (listp name) (eql (car name) obj))
:do (return (cadr name))
:finally (return 0)))
(map-transform (object)
(cond ((and (listp object)
(= 3 (length object))
(not (eql 0 (find-subs (second object)))))
`(,(find-subs (second object)) ,(first object) ,(third object)))
((listp object)
(mapcar #'map-transform object))
(t object))))
(map-transform single-form)))
SA
CL-USER> (macroexpand '(with-2arg-infix-syntax (progn (if (a = b)
(a + b)
(a mod b))
(print ((3 ^ 4) as 'float)))))
(PROGN
(IF (= A B)
(+ A B)
(MOD A B))
(PRINT (COERCE (3 ^ 4) 'FLOAT)))
SA
(defmacro with-[]access-syntax (single-form))
vector[15] -> (aref vector 15)
SA
SA
SA
(defmacro with-sugar (sugars &body body)
(if sugars
`(,(car sugars)
(with-sugar ,(cdr sugars) ,@body))
`(progn ,@body)))
SA
SA