[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: specification by implications and example

Shriram Krishnamurthi <shriram@xxxxxxxxxxx> writes:

> > But this is allowed:
> >         (set! ((if (random) car cdr) x) v)
> But when Matthias asked whether the grammar was
>   (set! exp exp)
> you said "No - that would be ambiguous".  I took a guess as to what
> that might mean, but you say my guess at something that would be
> erroneous is "valid syntactically".  So now I know neither what the
> comment about ambiguity refers to nor what the SRFI permits.

`((if (random) car cdr) x)' is not an expression in this context,
just like `x' is not an expresion in the context of `(set! x v)'.
In both cases, they could be called "lvalue expressions", but
Scheme does not have such a concept.

The indended definition is this and nothing more:

(define-syntax set!
  (syntax-rules ()
    ((set! (proc args ...) value)  ;; Assuming Alternative 1
     ((setter proc) args ... value))
    ;; ((set! (proc args ...) value) ;; Assuming Alternative 2
    ;;  ((setter proc) value args ...))
    ((set! var value)
     (%%builtin-set! var value))))
	--Per Bothner
per@xxxxxxxxxxx   http://www.bothner.com/~per/