Re: "type constructors" and unquote splicing
Hi,
no one responded, so I had to figure this out myself.
My original definition of LIST was obviously flawed:
(syntax LIST (lambda (node compiler)
`[OrderedCollection withAll: , <at> [node copyFrom: '1]]))
But this works as intended:
(syntax LIST (lambda (node compiler)
(let ((o [OrderedCollection new]) (i '1))
(while [i < [node size]]
[o add: [[node at: i] _eval]]
(set i [i + '1]))
`'(, <at> o))))
Hooray to #_eval - that made my day. Please let me know if it can be
optimised.
Best,
Michael
Am 05.01.2009 um 16:18 schrieb Michael Haupt:
> Dear list,
>
> having solved the trouble with shared libraries, I wrote some
> "constructor" functions in Jolt to be able to build muy objects more
> conveniently (i.e., avoiding the talkative keyword message syntax).
> They look like this, for example:
>
> (TYPE '23)
>
> (assuming that TYPE is some type parameterised with a number) with
> this implementation:
>
> (syntax TYPE (lambda (node compiler) `[MyType with: ,[node at: '1]]))
>
> This works fine unless I want to build a list of such "tagged type
> constructions". What I would like to have is a LIST syntax definition
> that accepts an arbitrary number of type constructor applications and
> effectively returns an AST with all the expanded type constructions.
>
> (LIST (TYPE '23) (TYPE '42))
>
> Another usage example: (ANOTHER-TYPE (LIST (TYPE '23) (TYPE '42)))
>
> My initial thought was that quasiquotation would help. I've been
> experimenting like mad but could not come up with a solution. Here's
> the (non-working) quasiquotation thing:
>
> (syntax LIST (lambda (node compiler)
> `[OrderedCollection withAll: , <at> [node copyFrom: '1]]))
>
> The trouble seems to be that , <at> expands all collection items in place,
> instead of providing a collection again. #withAll:, however, obviously
> expects a collection.
>
> How should the syntax definition look?
>
> Best,
>
> Michael
>
> --
> Dr.-Ing. Michael Haupt michael.haupt@...
> Software Architecture Group Phone: ++49 (0) 331-5509-542
> Hasso Plattner Institute for Fax: ++49 (0) 331-5509-229
> Software Systems Engineering http://www.hpi.uni-potsdam.de/swa/
> Prof.-Dr.-Helmert-Str. 2-3, D-14482 Potsdam, Germany
>
> Hasso-Plattner-Institut für Softwaresystemtechnik GmbH, Potsdam
> Amtsgericht Potsdam, HRB 12184
> Geschäftsführung: Prof. Dr. Christoph Meinel
>
>
>
>
>
>
> _______________________________________________
> fonc mailing list
> fonc@...
> http://vpri.org/mailman/listinfo/fonc
--
Dr.-Ing. Michael Haupt michael.haupt@...
Software Architecture Group Phone: ++49 (0) 331-5509-542
Hasso Plattner Institute for Fax: ++49 (0) 331-5509-229
Software Systems Engineering http://www.hpi.uni-potsdam.de/swa/
Prof.-Dr.-Helmert-Str. 2-3, D-14482 Potsdam, Germany
Hasso-Plattner-Institut für Softwaresystemtechnik GmbH, Potsdam
Amtsgericht Potsdam, HRB 12184
Geschäftsführung: Prof. Dr. Christoph Meinel
Hi,
no one responded, so I had to figure this out myself.
My original definition of LIST was obviously flawed:
(syntax LIST (lambda (node compiler)
`[OrderedCollection withAll: , <at> [node copyFrom: '1]]))
But this works as intended:
(syntax LIST (lambda (node compiler)
(let ((o [OrderedCollection new]) (i '1))
(while [i < [node size]]
[o add: [[node at: i] _eval]]
(set i [i + '1]))
`'(, <at> o))))
Hooray to #_eval - that made my day. Please let me know if it can be
optimised.
Best,
Michael
Am 05.01.2009 um 16:18 schrieb Michael Haupt:
> Dear list,
>
> having solved the trouble with shared libraries, I wrote some
> "constructor" functions in Jolt to be able to build muy objects more
> conveniently (i.e., avoiding the talkative keyword message syntax).
> They look like this, for example:
>
> (TYPE '23)
>
> (assuming that TYPE is some type parameterised with a number) with
> this implementation:
>
> (syntax TYPE (lambda (node compiler) `[MyType with: ,[node at: '1]]))
>
> This works fine unless I want to build a list of such "tagged type
> constructions". What I would like to have is a LIST syntax definition
> that accepts an arbitrary number of type constructor applications and
> effectively returns an AST with all the expanded type constructions.
>
> (LIST (TYPE '23) (TYPE '42))
>
> Another usage example: (ANOTHER-TYPE (LIST (TYPE '23) (TYPE '42)))
>
> My initial thought was that quasiquotation would help. I've been
> experimenting like mad but could not come up with a solution. Here's
> the (non-working) quasiquotation thing:
>
> (syntax LIST (lambda (node compiler)
> `[OrderedCollection withAll: , <at> [node copyFrom: '1]]))
>
> The trouble seems to be that , <at> expands all collection items in place,
> instead of providing a collection again. #withAll:, however, obviously
> expects a collection.
>
> How should the syntax definition look?
>
> Best,
>
> Michael
>
> --
> Dr.-Ing. Michael Haupt michael.haupt@...
> Software Architecture Group Phone: ++49 (0) 331-5509-542
> Hasso Plattner Institute for Fax: ++49 (0) 331-5509-229
> Software Systems Engineering http://www.hpi.uni-potsdam.de/swa/
> Prof.-Dr.-Helmert-Str. 2-3, D-14482 Potsdam, Germany
>
> Hasso-Plattner-Institut für Softwaresystemtechnik GmbH, Potsdam
> Amtsgericht Potsdam, HRB 12184
> Geschäftsführung: Prof. Dr. Christoph Meinel
>
>
>
>
>
>
> _______________________________________________
> fonc mailing list
> fonc@...
> http://vpri.org/mailman/listinfo/fonc
--
--
Dr.-Ing. Michael Haupt michael.haupt@...
Software Architecture Group Phone: ++49 (0) 331-5509-542
Hasso Plattner Institute for Fax: ++49 (0) 331-5509-229
Software Systems Engineering http://www.hpi.uni-potsdam.de/swa/
Prof.-Dr.-Helmert-Str. 2-3, D-14482 Potsdam, Germany
Hasso-Plattner-Institut für Softwaresystemtechnik GmbH, Potsdam
Amtsgericht Potsdam, HRB 12184
Geschäftsführung: Prof. Dr. Christoph Meinel