Browse code
Add "may"
Showing 2 changed files
... | ... |
@@ -198,6 +198,24 @@ |
198 | 198 |
(defun %default-pair-transform (k v) |
199 | 199 |
(cons (alexandria:make-keyword (string-upcase k)) v)) |
200 | 200 |
|
201 |
+(defun find-nonoperator-symbols (form) |
|
202 |
+ (alexandria:flatten |
|
203 |
+ (remove-duplicates |
|
204 |
+ (typecase form |
|
205 |
+ (symbol (list form)) |
|
206 |
+ (cons (append |
|
207 |
+ (when (consp (car form)) |
|
208 |
+ (find-nonoperator-symbols (car form))) |
|
209 |
+ (typecase (cdr form) |
|
210 |
+ (symbol (list (cdr form))) |
|
211 |
+ (cons (loop for thing in (cdr form) |
|
212 |
+ append (find-nonoperator-symbols thing)))))))))) |
|
213 |
+ |
|
214 |
+(defmacro may ((op arg)) |
|
215 |
+ (alexandria:once-only (arg) |
|
216 |
+ `(when ,arg |
|
217 |
+ (,op ,arg)))) |
|
218 |
+ |
|
201 | 219 |
(defmacro default-when (default test &body body) |
202 | 220 |
"return the default unless the test is true" |
203 | 221 |
(warn "default-when is deprecated, renamed to default-unless") |
... | ... |
@@ -31,7 +31,8 @@ |
31 | 31 |
#:skip-values #:limit-values #:substitute-values #:op #:pick/r |
32 | 32 |
#:pick-error #:twice #:glambda |
33 | 33 |
#:default-unless |
34 |
- #:transform-first-value)) |
|
34 |
+ #:transform-first-value |
|
35 |
+ #:may)) |
|
35 | 36 |
|
36 | 37 |
(defpackage :fwoar.lisputils.shortcuts |
37 | 38 |
(:use :cl :fwoar.lisputils) |