Alternative formulations of keywords
John Cowan
(11 Apr 2006 22:35 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 01:58 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 02:54 UTC)
|
Re: Alternative formulations of keywords
Per Bothner
(12 Apr 2006 03:05 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 03:12 UTC)
|
Re: Alternative formulations of keywords
Eli Barzilay
(12 Apr 2006 03:17 UTC)
|
Re: Alternative formulations of keywords
Eli Barzilay
(12 Apr 2006 03:20 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 03:27 UTC)
|
Re: Alternative formulations of keywords
Per Bothner
(12 Apr 2006 03:20 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 04:20 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 04:32 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 05:11 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 12:16 UTC)
|
Re: Alternative formulations of keywords
Eli Barzilay
(12 Apr 2006 12:29 UTC)
|
Re: Alternative formulations of keywords Marc Feeley (12 Apr 2006 13:07 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 13:36 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 14:25 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 14:28 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 14:57 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 16:26 UTC)
|
Re: Alternative formulations of keywords
Per Bothner
(12 Apr 2006 16:49 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 16:56 UTC)
|
Re: Alternative formulations of keywords
Eli Barzilay
(12 Apr 2006 13:37 UTC)
|
Re: Alternative formulations of keywords
Marc Feeley
(12 Apr 2006 04:54 UTC)
|
Re: Alternative formulations of keywords
John Cowan
(12 Apr 2006 16:07 UTC)
|
On 12-Apr-06, at 8:16 AM, John Cowan wrote: > Marc Feeley scripsit: > >> If you try to formalize the cases in which it does work and the cases >> in which it doesn't you will realize that it is very hard to specify >> precisely. You have to assume a particular set of powerful analyzes >> that are performed by the compiler, and your semantics will depend on >> the existence of these analyzes. This places difficult constraints >> on the Scheme implementation. > > It's syntactic sugar, so I'm fine with it not working in any case > that's > at all tricky. Please define precisely what is a "tricky case". If you do this exercice you will see that it is very hard to formalize a compile time only mechanism for named optional parameters that is useful. > >> For example can your proposed approach work in this case: >> >> (define (f g) >> (g foo: 11 bar: 22)) > > Plainly no. The compiler should cough with "keywords in call of > unknown > function". > >> or in this case: >> >> (define (f #!key (x 11) (y 22)) (+ x y)) >> (define (g z) (f y: z)) >> (define (h) (set! f (lambda (#!key (y 33) (z 44)) (* y z)))) > > Again, plainly no. I might have said "only if the compiler can prove > that h is always called before g is", but that's precisely the sort > of tricky analysis neither of us would want to depend on. > > Here the error is "keyword y: not known for function f." > > In short, the definition of a function must be either global or > lexically apparent for it to be callable with keywords. Most Scheme systems allow separate compilation (think of "load"). If one file contains: (define (f #!key (x 11) (y 22)) (+ x y)) (define (g z) (f y: z)) and the other contains: (set! f (lambda (#!key (y 33) (z 44)) (* y z))) You have the same problem. So it doesn't suffice for the function definition to be global. The way I see it you are forbidding the use of higher-order functions in combination with named optional parameters. That would be a serious limitation for a functional language like Scheme. Marc