time to finish off/up srfi-17
Per Bothner
(17 Jul 2000 18:12 UTC)
|
Re: time to finish off/up srfi-17
Sergei Egorov
(17 Jul 2000 18:44 UTC)
|
Re: time to finish off/up srfi-17
Michael Livshin
(21 Jul 2000 21:54 UTC)
|
Re: time to finish off/up srfi-17
Shriram Krishnamurthi
(21 Jul 2000 22:02 UTC)
|
Re: time to finish off/up srfi-17
Michael Livshin
(21 Jul 2000 22:08 UTC)
|
Re: time to finish off/up srfi-17
Per Bothner
(21 Jul 2000 22:18 UTC)
|
Re: time to finish off/up srfi-17
Shriram Krishnamurthi
(21 Jul 2000 23:19 UTC)
|
Re: time to finish off/up srfi-17
sperber@xxxxxx
(22 Jul 2000 13:51 UTC)
|
Re: time to finish off/up srfi-17
Per Bothner
(23 Jul 2000 16:51 UTC)
|
Re: time to finish off/up srfi-17 Per Bothner (24 Jul 2000 09:03 UTC)
|
Re: time to finish off/up srfi-17
sperber@xxxxxx
(24 Jul 2000 10:07 UTC)
|
Per Bothner <xxxxxx@bothner.com> writes: > Ok, let's finalize it then. Thanks for your patience. Ooops. Mikael Djurfeldt <xxxxxx@mdj.nada.kth.se> just mailed me a suggested formal syntax and semantics. I'm just about to go to bed, so I haven't had a chance to more than glance it, but it seems to make sense to edit it in. What do you people more experienced in these things think? I [i.e. Mikael] chose between an intuitive version which cuts pretty deeply into the semantics of Scheme and a more conservative version which was less intuitive. I chose the former because of its clarity. Though, it's worth noting that the change is less deep than it looks like: We basically only add a new applicable type, and most implementations in practise already have several applicable types (several types of procedures, continuations etc). ---------------------------------------------------------------------- Extensions to formal syntax: 1. <generalized assignment> is substituted for <assignment> in the production for <expression>. 2. The following two productions are added: <generalized assignment> --> (set! <access spec> <expression>) <access spec> --> <variable> | <procedure call> ---------------------------------------------------------------------- Extensions to formal semantics: Abstract syntax: 1. A new alternative for `set!' is added to the production for Exp: Exp --> K | ... | (set! (E0 E*) E1) Domain equations: 2. The following equation is added: Fs = L x (E* --> K --> C) x F 3. The equation for E is extended with Fs, i.e. it changes from E = Q + H + R + Ep + Ev + Es + M + F to E = Q + H + R + Ep + Ev + Es + M + F + Fs Semantic functions: 4. The following definition is added: E[[ (set! (E0 E*) E1) ]] = E[[ ((setter E0) E* E1) ]] Auxiliary functions: 5. `applicate' is changed from lambda e e* k . e belongs to F --> (e | F ref 2) e* k, wrong "bad procedure" to lambda e e* k . e belongs to F --> (e | F ref 2) e* k, e belongs to Fs --> (e | Fs ref 2) e* k, wrong "bad procedure" 6. The following functions are added: setter: E* --> K --> C setter = onearg(lambda e k . e belongs to Fs --> send(e | Fs ref 3 in E), wrong "bad procedure with setter") getter-with-setter: E* --> K --> C getter-with-setter = twoarg(lambda e1 e2 k sigma . e1 belongs to F --> (e2 belongs to F --> (new sigma belongs to L --> send(<new sigma, e1 | F ref 2, e2 | F> in E) k (update (new sigma | L) unspecified sigma), wrong "out of memory" sigma), wrong "bad procedure in second argument"), wrong "bad procedure in first argument") -- --Per Bothner xxxxxx@bothner.com http://www.bothner.com/~per/