Re: Reviewing named and optional parameters
Daphne Preston-Kendal 31 Jul 2021 17:45 UTC
On 31 Jul 2021, at 19:33, John Cowan <xxxxxx@ccil.org> wrote:
> On Sat, Jul 31, 2021 at 6:02 AM Daphne Preston-Kendal <xxxxxx@nonceword.org> wrote:
>
>> Then we can safely define either
>>
>> keyword → ⟨identifier⟩ :
>> (DSSSL style)
>> *or*
>> keyword → : ⟨identifier⟩
>> (Common Lisp style)
>>
>> in Large, no? Assuming we choose to have some kind of lexical keyword type (which I think would be a good idea, notwithstanding programs that use them probably automatically lose small portability).
>
> Yes, given that we are able to swallow that incompatibility. The WG2 charter says "Every program that conforms to the specifications produced by working group 1 (and relies on no features beyond those guaranteed by those specifications) must also be a program that conforms to the specifications produced by working group 2." This implies to me that we must maintain backward compatibility; it is not enough that ':foo is a program in both R7RS-small and R7RS-large; it must mean the same thing in both languages.
Well, under a strict interpretation of that, we can’t define either — at least not without requiring explicit quoting of keywords. Prefix #: would be fine, though (but Gerbil, at least, will need heroic efforts to support it, since it piggy-backs on Gambit’s reader, which thinks #: means an uninterned symbol).
>> Okay, so there’s some internal magic going on here to detect which keywords were actually passed and supply the defaults, despite there being no defaults in the method signature? Or does CL have another way to do that detection?
>
> What I gave you was the abbreviated form given in the spec, and the default values are in the prose.
Ah, right. lambda-keyword (whatever form it takes) should be able to do all this on all Schemes targeted by a bridged implementation already.
Daphne