3.6.3 let 语句中的未初始化变量

如果在 let 语句中不将变量绑定到特定的初始值,它们将自动绑定到初始值为 nil,如下面的表达式所示:

(let ((birch 3)
      pine
      fir
      (oak 'some))
  (message
   "这里有 %d 个变量,分别具有 %s、%s 和 %s 的值。"
   birch pine fir oak))

这里,变量列表是 ((birch 3) pine fir (oak 'some))

如果以通常的方式评估此表达式,将在你的回显区域中看到以下内容:

"这里有 3 个变量,分别具有 nil、nil 和 some 的值。"

在这个例子中,Emacs将符号 birch 绑定到数字3,将符号 pinefir 绑定到 nil,并将符号 oak 绑定到值 some

注意,在 let 的第一部分中,变量 pinefir 作为不带括号的原子独立存在;这是因为它们被绑定到 nil,即空列表。但是,oak 被绑定到 some,因此是列表 (oak 'some) 的一部分。类似地,birch 被绑定到数字3,因此在具有该数字的列表中。 (由于数字在评估时为自身,因此数字不需要引用。此外,消息中使用 ‘%d’ 而不是 ‘%s’ 打印数字。) 这四个变量作为一个组被放入列表中,以将它们与 let 的主体分开。