See `first-order->higher-order'.
At Sat, 4 Sep 2010 17:00:52 -0400, Nadeem Abdul Hamid wrote: > Ah, thank you. Now, how about this definition: > > (define-syntax (my-macro stx) > (syntax-case stx (->) > [(_ (func arg ...) -> rslt) > #`(length (cons func (list arg ...)))])) > (provide my-macro ->) > > i.e. my macro takes the function name, bundles in up in a structure > (here I just used "cons") and then maybe passes it off to something > else for processing (here I just used "length" for illustration). > > Now, doing something like this in the BSL file: > (my-macro (reward 3) -> "bronze") > > produces: > reward: this is a procedure, so it must be applied to arguments > (which requires using a parenthesis before the name) > > > > > > On Sat, Sep 4, 2010 at 4:42 PM, Matthias Felleisen <[email protected]> > wrote: > > > > You need to define and export -> . Otherwise students don't have access to > the specific -> in your macro. > > > > BTW, injecting macros into *sl languages demands a lot of error checking > because novices are easily confused. > > > > > > > > > > On Sep 4, 2010, at 4:37 PM, Nadeem Abdul Hamid wrote: > > > >> Suppose I make a "teachpack" that defines a macro: > >> > >> #lang racket > >> ... > >> (define-syntax (my-macro stx) > >> (syntax-case stx (->) > >> [(_ (func arg ...) -> rslt) > >> #`(check-expect (func arg ...) rslt)])) > >> (my-macro (+ 4 5) -> 10) > >> (test) > >> (provide my-macro) > >> > >> Running this file works fine. > >> > >> Now, how exactly do I make this macro available to programs written in > >> Beginning/Intermediate Student? Opening up a file in BSL level and > >> typing: > >> (require "my-macro.rkt") > >> (my-macro (+ 4 5) -> 9) > >> gives the error: > >> my-macro: bad syntax > >> > >> This macro is a simplification of the real thing I'm working on, but > >> note that the arguments to this macro include name(s) of functions > >> defined in the BSL file. I though of maybe using > >> provide-higher-order-primitive, but it doesn't seem to work either. > >> > >> --- nadeem > >> _________________________________________________ > >> For list-related administrative tasks: > >> http://lists.racket-lang.org/listinfo/dev > > > > > _________________________________________________ > For list-related administrative tasks: > http://lists.racket-lang.org/listinfo/dev _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev

