Skip to content

Commit

Permalink
add defines (define*)
Browse files Browse the repository at this point in the history
  • Loading branch information
bennn committed Oct 27, 2021
1 parent 601584b commit f00fea5
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 0 deletions.
12 changes: 12 additions & 0 deletions defines/defines-test.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#lang racket/base
(module+ test
(require rackunit syntax-parse-example/defines/defines)

(test-case "quot/rem"
(defines
[x 4]
[y 18]
[(quot rem) (quotient/remainder x y)])
(check-equal? quot 0)
(check-equal? rem 4))
)
10 changes: 10 additions & 0 deletions defines/defines.rkt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#lang racket
(provide defines)
(require syntax/parse/define)

(define-syntax-parser defines
[(_ (~or [id:id expr:expr]
[(idv:id ...+) expr:expr]) ...+)
#'(begin
(~? (define id expr)
(define-values (idv ...) expr)) ...)])
36 changes: 36 additions & 0 deletions defines/defines.scrbl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#lang syntax-parse-example
@require[
(for-label racket/base syntax/parse syntax-parse-example/defines/defines)]

@(define defines-eval
(make-base-eval '(require syntax-parse-example/defines/defines)))

@title{@tt{defines}}
@stxbee2021["Fictitious-Rotor" 7]

@; =============================================================================

@defmodule[syntax-parse-example/defines/defines]{}

@defform[(defines expr ...)]{
Make a sequence of definitions --- similar to @racket[let*].

Definitions are automatically dispatched either to @racket[define] or @racket[define-values]
depending on the manner in which identifiers are supplied.

@examples[#:eval defines-eval
(defines
[x 4]
[y 18]
[(quot rem) (quotient/remainder x y)])
quot
rem
]

The macro uses the @racket[~?] fallthrough syntax to choose between
@racket[define] and @racket[define-values].

@racketfile{defines.rkt}

@; TODO add description here
}
1 change: 1 addition & 0 deletions index.scrbl
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
@; =============================================================================

@include-example{displaylns}
@include-example{defines}
@include-example{first-class-or}
@include-example{optional-assert}
@include-example{make-variable}
Expand Down

0 comments on commit f00fea5

Please sign in to comment.