Under any Scheme standard, is (let (x y z) x) valid code?

In both Emacs Lisp and Common Lisp, the following returns nil

(let (x y z)

yet in every Scheme that I've tried, it throws an error.

Has the above been acceptable under any Scheme standard?


  • No, the posted code was never legal in standard Scheme. For all Scheme standards since R1RS (1978) let has had the syntax: (let ((var1 form1) ...) expr1 expr2 ...). The original Scheme paper by Sussman and Steele (1975) did not even use let.

    Note that, e.g., (let () 42) is legal in both Scheme and in Common Lisp, i.e., it is legal to have a let form with no bindings.