[plt-scheme] Re (modified): macros that expand into LISTS OF top-level definitions with computed names

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sat Aug 15 09:39:58 EDT 2009

On Aug 14, 2009, at 10:15 PM, Lee Spector wrote:

>
> That's an interesting approach -- quite different than what I had  
> in mind. I don't mind having the list of types below the syntax  
> definition, but in this formulation one has to modify the syntax  
> definition to add/delete instructions. But you've given me the  
> tools to work with and I see some things that I could try.

Indeed, if you really need to add and delete types to the initial  
sets, it should be straightforward to create appropriate macros.




>
> Thanks,
>
>  -Lee
>
>
> On Aug 14, 2009, at 9:45 PM, Matthias Felleisen wrote:
>
>>
>> I don't know how to define the types first and then create the  
>> definitions w/o some mapping and whatever through syntax. BUT,  
>> when I have to do such things I actually define the list of types  
>> AND the 'instructions' at the same time: see below. (My one  
>> released instance that I can think of is the 'instruction set' for  
>> the Universe language, see collects/2htdp/universe.ss).
>>
>> -- Matthias
>> #lang scheme
>>
>> (define register-instruction void)
>> (define pusher void)
>>
>> (define-syntax (define-types stx)
>> (syntax-case stx ()
>>   [(_ name type ...)
>>    (let ([.exec (lambda (t)
>>                   (define t:str (symbol->string (syntax-e t)))
>>                   (define t.exec (string-append t:str  ".exec"))
>>                   (datum->syntax stx (string->symbol t.exec)))])
>>      (with-syntax ([(index ...) (map .exec (syntax->list (syntax  
>> (type ...))))])
>>        #`(begin (define name '(type ...))
>>                 (define-values (index ...) (values (pusher  
>> 'type) ...))
>>                 (register-instruction 'type) ...)))]))
>>
>> ;; --- let's "test" ---
>>
>> (define-types types* exec float integer)
>>
>> "we define the list of all types"
>> types*
>>
>> "... and see these names are defined now"
>> exec.exec
>> float.exec
>> integer.exec
>
> --
> Lee Spector, Professor of Computer Science
> School of Cognitive Science, Hampshire College
> 893 West Street, Amherst, MA 01002-3359
> lspector at hampshire.edu, http://hampshire.edu/lspector/
> Phone: 413-559-5352, Fax: 413-559-5438
>
> Check out Genetic Programming and Evolvable Machines:
> http://www.springer.com/10710 - http://gpemjournal.blogspot.com/
>
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme



Posted on the users mailing list.