On 12/08/2011 09:48 AM, Harry Spier wrote:
I get the error for (get array-element v1[1 1 1]  "expand: unbound
identifier in module in: get"
I can't speak authoritatively, but I don't think that an identifier macro captures any syntax before the identifier. I think set! is a special case.
and for (set! array-element v1[1 1 1] I get the error of: "set!: bad
syntax (has 4 parts after keyword) in: (set! array-element v1 (1 1 0)
999999)"

Using syntax-id-rules is there a way to write my array-element macro so that :
(get array-element  v1[1 1 1])
(set! array-element v1[1 1 0] 999999)
work correctly without the "get" and "set!" identifiers giving me errors.


The best I could come up with is:

(define-syntax array-element
  (syntax-id-rules (set!)
    [(set! _ (v[d1] exp)) (vector-set! v d1 exp)]
[(set! _ (v[d1 d2 ...] exp)) (set! array-element ((vector-ref v d1)[d2 ...]exp))]
    [(_ v[d1]) (vector-ref v d1)]
    [(_ v[d1  d2 ...] ) (array-element (vector-ref v d1)[d2 ...] )]))

(array-element  v1[1 1 1])
(set! array-element (v1[1 1 0] 999999))

This removes the "get", and works around the set! problem with extra parentheses (although it looks weird to me). Note that the "set!" pattern/templates have to come first.

Hope this helps,
Dave
_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/users

Reply via email to