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

ISSUE: VARIABLE-LIST-ASYMMETRY



Issue:          VARIABLE-LIST-ASYMMETRY
References:     CLtL pgs. 110, 122, 131
Category:       CHANGE
Edit history:   Revision 1 by Skona Brittain 07/26/88


Problem Description:

The symtax of items in the variable-list for various control structues
(do, let, prog and their duals) varies.  This variation seems unnecessary.

The allowed variations are indicated in the following chart:

do & do*:             (var)    (var init)    (var init step)
prog & prog*:   var   (var)    (var init)       n.a.
let & let*:     var            (var val)        n.a.

Note that just plain    var    is prohibited in do forms
and that the case of   (var)   is prohibited in let forms.


Proposal (VARIABLE-LIST-ASYMMETRY:SYMMETRIZE):

Change the variable-list in the syntax descriptions as follows:
do & do*:   ( { var | (var [init [step]] ) }* )
let & let*: ( { var | (var [value]       ) }* )


Test Cases:

(let (a (b) (c 3)) ... )  would be valid.

(do* (a (b) (c 3)) ... )  would be valid.


Rationale:

The assymetry is unnecessary and impedes learning of CL.


Current Practice:

KCL allows  (var)   in let 
but not      var    in do.


Cost to Implementors:

Very slight.


Cost to Users:

None.


Cost of Non-Adoption:

The variation in syntax makes them harder to learn.


Benefits:

Ease of learning.


Aesthetics:

Symmetry is more aesthetic than assymetry, at least to some of us.


Discussion: