I think it's time to write a guide on how to write teachpacks. Robby and I are no longer alone. -- Matthias
On Sep 4, 2010, at 6:29 PM, Matthew Flatt wrote: > 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

