1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | (define-macro-cases num [(num 42) "match"] [else "nope"]) (num 42) ; "match" (num 24) ; "nope" (num "foo") ; "nope" (define-macro-cases str [(str "foo") "match"] [else "nope"]) (str "foo") ; "match" (str foo) ; "nope" (str "bar") ; "nope" (define-macro-cases sym [(sym 'foo) "match"] [else "nope"]) (sym 'foo) ; "match" (sym 'bar) ; "nope" (sym "foo") ; "nope" (define-macro-cases id [(id foo) "match"] [else "nope"]) (id foo) ; "match" (id bar) ; "nope" (id "foo") ; "nope" |
1 2 3 4 5 6 | (define-macro (self ARG) #'ARG) (self "foo") ; "foo" (self (list 1 2 3)) ; '(1 2 3) (define-macro (add-three ARG) #'(+ ARG ARG ARG)) (add-three 42) ; 126 |
1 2 3 | (define-macro (odds FIRST _ THIRD _ FIFTH) #'(list FIRST THIRD FIFTH)) (odds 1 2 3 4 5) ; '(1 3 5) |
1 2 3 4 5 6 7 8 | (define-macro (m NUMS) (with-pattern ([(FIRST SECOND THIRD) #'NUMS]) #'(list THIRD SECOND FIRST))) (m (1 2 3)) ; '(3 2 1) (define-macro (m2 (FIRST SECOND THIRD)) #'(list THIRD SECOND FIRST)) (m2 (1 2 3)) ; '(3 2 1) |
1 2 3 | (define-macro (m2 (FIRST SECOND THIRD)) #'(list THIRD SECOND FIRST)) (m2 1 2 3) ; error: no match, because no sublist |
1 2 3 4 5 6 | (define-macro (ellip ARG ...) #'(list ARG ...)) (ellip 1 2 3) ; '(1 2 3) (ellip "a" "b") ; '("a" "b") (ellip) ; '() |
1 2 3 | (define-macro (bad-ellip ARG ...) #'(list ARG)) (bad-ellip 1 2 3) ; error: missing ellipsis |
1 2 3 4 5 | (define-macro (m . ARGS) #'ARGS) (m + 1 2 3) ; means #'(+ 1 2 3) = 6 (define-macro (m2 . ARGS) #'(list . ARGS)) (m2 1 2 3) ; means #'(list 1 2 3) = '(1 2 3) |
1 2 3 4 5 | (define-macro (m ARG ...) #'(ARG ...)) (m + 1 2 3) ; means #'(+ 1 2 3) = 6 (define-macro (m2 ARG ...) #'(list ARG ...)) (m2 1 2 3) ; means #'(list 1 2 3) = '(1 2 3) |