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

如果在 let 语句中不为变量绑定指定初始值, 它们会自动绑定到初始值 nil,如下例所示:

(let ((birch 3)
      pine
      fir
      (oak 'some))
  (message
   "Here are %d variables with %s, %s, and %s value."
   birch pine fir oak))

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

按常规方式对该表达式求值后,回显区会显示:

"Here are 3 variables with nil, nil, and some value."

本例中,Emacs 将符号 birch 绑定到数字 3, 将符号 pinefir 绑定到 nil, 将符号 oak 绑定到值 some

注意在 let 的第一部分中,变量 pinefir 以独立原子形式出现,没有被括号包裹;这是因为它们被绑定到空列表 nil。 而 oak 被绑定到 some,因此出现在列表 (oak 'some) 中。 同理,birch 被绑定到数字 3,因此与该数字同属一个列表。 (由于数字求值为自身,无需加引号。同时,在消息中数字使用 ‘%d’ 而非 ‘%s’ 打印。)这四个变量被统一放入一个列表, 与 let 的函数体分隔开。