J. Mini Asked: 2023-09-27 05:01:48 +0800 CST2023-09-27 05:01:48 +0800 CST 2023-09-27 05:01:48 +0800 CST 在任何Scheme标准下, (let (xyz) x) 是有效代码吗? 772 在 Emacs Lisp 和 Common Lisp 中,返回以下内容nil (let (x y z) x) 但在我尝试过的每个方案中,它都会引发错误。 上述内容在任何计划标准下是否可以接受? scheme 2 个回答 Voted Best Answer ad absurdum 2023-09-27T05:42:02+08:002023-09-27T05:42:02+08:00 不,发布的代码在标准方案中从来都不合法。自R1RS (1978) 以来的所有计划标准都let具有语法:(let ((var1 form1) ...) expr1 expr2 ...)。Sussman 和 Steele (1975)最初的计划论文甚至没有使用let. 请注意,eg在Scheme 和Common Lisp 中(let () 42) 都是合法的,即具有没有let绑定的表单是合法的。 amalloy 2023-09-27T05:31:19+08:002023-09-27T05:31:19+08:00 “任何版本的计划”都是一个非常宽泛的概念,可能需要一些研究才能排除所有历史。但在我知道的现代方案中,这是不允许的,并且 R5RS 标准显然不允许它,通过指定a 的绑定let必须以名称/值对的形式出现,并且不指定没有值的名称的含义。
不,发布的代码在标准方案中从来都不合法。自R1RS (1978) 以来的所有计划标准都
let
具有语法:(let ((var1 form1) ...) expr1 expr2 ...)
。Sussman 和 Steele (1975)最初的计划论文甚至没有使用let
.请注意,eg在Scheme 和Common Lisp 中
(let () 42)
都是合法的,即具有没有let
绑定的表单是合法的。“任何版本的计划”都是一个非常宽泛的概念,可能需要一些研究才能排除所有历史。但在我知道的现代方案中,这是不允许的,并且 R5RS 标准显然不允许它,通过指定a 的绑定
let
必须以名称/值对的形式出现,并且不指定没有值的名称的含义。