I think I've successfully written the macro:
(define-syntax (lit-examples stx) (syntax-case stx () [(_ e ...) #`(begin (let ([evaluator (make-base-eval)] [here (quote-source-file #,stx)]) (evaluator `(begin (dynamic-require '(file ,here) #f) (current-namespace (module->namespace '(file ,here))))) (examples #:eval evaluator e ...)))])) Do you have any advice on better style? This is my first "real" Racket macro, and it was pretty hard to get working, so I am pretty sure the code is gross in some way. On Thu, Dec 18, 2014 at 3:14 PM, Joel McCracken <mccracken.j...@gmail.com> wrote: > I tried creating an `examples` macro like the existing `examples` > macro, without success. I'll try again later, but for now thanks! This > makes things much nicer. > > On Wed, Dec 17, 2014 at 10:26 AM, Matthew Flatt <mfl...@cs.utah.edu> wrote: >> The `scribble/lp2` language doesn't include any new support for >> `examples`. Maybe the code to create and initialize `evaluator` belongs >> in a library somewhere, though. >> >> At Wed, 17 Dec 2014 10:17:57 -0500, Joel McCracken wrote: >>> OK, so I've gotten a Racket that has scribble/lp2, so Yay. I can >>> generate documentation with the "Scribble HTML". >>> >>> >>> Do I need to do something to make `@examples` evaluate with the >>> current module? This is what I'm currently using that makes it work: >>> >>> >>> #lang scribble/lp2 >>> @(require scribble/base >>> scribble/eval) >>> >>> @title{An Example} >>> >>> This would be a @bold{wonderful} way to accomplish things! >>> >>> >>> @chunk[<*> >>> (define (f x) >>> <f-body>)] >>> >>> @chunk[<f-body> >>> (* x x)] >>> >>> >>> And then, I could show an example: >>> >>> @(begin >>> (require syntax/location) >>> (define here (quote-source-file)) >>> (define evaluator (make-base-eval)) >>> (evaluator `(begin >>> (dynamic-require '(file ,here) #f) >>> (current-namespace >>> (module->namespace '(file ,here)))))) >>> >>> @examples[ >>> #:eval evaluator >>> (f 10) >>> ] >>> >>> >>> I'm not sure if lp2 includes some facility to make @examples work >>> without the evaluator creation. >>> >>> >>> >>> >>> On Tue, Dec 16, 2014 at 11:48 PM, Joel McCracken >>> <mccracken.j...@gmail.com> wrote: >>> > I'm glad there is a repository issue -- that's where I tried without >>> > success. I tried the build available right now (3bb896d) without >>> > success, but will look again tomorrow. >>> > >>> > This is the reason I think Racket is so great. You were able to create >>> > the lp language version 2 as an afterthought. Awesome. >>> > >>> > On Tue, Dec 16, 2014 at 3:04 PM, Matthew Flatt <mfl...@cs.utah.edu> wrote: >>> >> ... after the next build, at least. >>> >> >>> >> Problems related to the repository split have prevented the snapshots >>> >> from being up-to-date for the past few days, but I'm optimistic that >>> >> the next snapshot will be right. >>> >> >>> >> At Tue, 16 Dec 2014 14:54:06 -0500, Matthias Felleisen wrote: >>> >>> >>> >>> You probably want the current snapshot: >>> >>> >>> >>> http://www.cs.utah.edu/plt/snapshots/ >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> On Dec 16, 2014, at 1:28 PM, Joel McCracken <mccracken.j...@gmail.com> >>> wrote: >>> >>> >>> >>> > Forwarding to users, since I forgot to reply-all. >>> >>> > >>> >>> > >>> >>> > ---------- Forwarded message ---------- >>> >>> > From: Joel McCracken <mccracken.j...@gmail.com> >>> >>> > Date: Tue, Dec 16, 2014 at 1:27 PM >>> >>> > Subject: Re: [racket] using scribble/eval in conjunction with >>> >>> > scribble/lp >>> >>> > To: Matthew Flatt <mfl...@cs.utah.edu> >>> >>> > >>> >>> > >>> >>> > Hmm, I'm having trouble finding this new release of Racket that will >>> >>> > allow a #lang scribble/lp2 -- I'll keep looking later. This is awesome >>> >>> > though, thank you for the prompt response! >>> >>> > >>> >>> > On Mon, Dec 15, 2014 at 8:15 PM, Matthew Flatt <mfl...@cs.utah.edu> >>> >>> > wrote: >>> >>> >> At Mon, 15 Dec 2014 15:49:38 -0700, Matthew Flatt wrote: >>> >>> >>> Meanwhile, I'll work on changing `scribble/lp` so that a module >>> >>> >>> implemented with `#lang scribble/lp` can be passed directly to >>> >>> >>> Scribble. >>> >>> >> >>> >>> >> That turned out to be `scribble/lp2`, since the changes would be >>> >>> >> incompatible with existing uses of `scribble/lp`. >>> >>> >> >>> >>> >> With the development versions of the "drracket" and "scribble" >>> >>> >> packages, and with the program below, you can click "Run" to run the >>> >>> >> program and interact with `f`, or you can click one of the "Scribble" >>> >>> >> buttons to render the document. >>> >>> >> >>> >>> >> ---------------------------------------- >>> >>> >> >>> >>> >> #lang scribble/lp2 >>> >>> >> @(require scribble/base >>> >>> >> scribble/eval) >>> >>> >> >>> >>> >> @title{An Example} >>> >>> >> >>> >>> >> This would be a @bold{wonderful} way to accomplish things! >>> >>> >> >>> >>> >> @chunk[<*> >>> >>> >> (define (f x) >>> >>> >> <f-body>)] >>> >>> >> >>> >>> >> @chunk[<f-body> >>> >>> >> (* x x)] >>> >>> >> >>> >>> >> >>> >>> >> And then, I could show an example: >>> >>> >> >>> >>> >> @(begin >>> >>> >> (require syntax/location) >>> >>> >> (define here (quote-source-file)) >>> >>> >> (define evaluator (make-base-eval)) >>> >>> >> (evaluator `(begin >>> >>> >> (dynamic-require '(file ,here) #f) >>> >>> >> (current-namespace >>> >>> >> (module->namespace '(file ,here)))))) >>> >>> >> >>> >>> >> @examples[ >>> >>> >> #:eval evaluator >>> >>> >> (f 10) >>> >>> >> ] >>> >>> >> >>> >>> > ____________________ >>> >>> > Racket Users list: >>> >>> > http://lists.racket-lang.org/users >>> >>> >>> >>> ____________________ >>> >>> Racket Users list: >>> >>> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users