print-elements-of-list
函数print-elements-of-list
函数演示了使用列表的 while
循环。
该函数需要多行输出。如果您正在使用最近版本的 GNU Emacs 阅读此文档,您可以像往常一样在 Info 中评估以下表达式。
如果您使用较早版本的 Emacs,则需要将必要的表达式复制到 *scratch* 缓冲区并在那里进行评估。这是因为早期版本的回显区只有一行。
您可以通过使用 C-SPC(set-mark-command
)标记区域的开头,将光标移动到区域的末尾,然后使用 M-w(kill-ring-save
,它调用 copy-region-as-kill
并提供视觉反馈)来复制区域。在 *scratch* 缓冲区中,您可以通过键入 C-y(yank
)将表达式还原。
在将表达式复制到 *scratch* 缓冲区后,逐个评估每个表达式。确保通过键入 C-u C-x C-e 评估最后一个表达式 (print-elements-of-list animals)
,即通过给 eval-last-sexp
提供参数。这将导致评估的结果在 *scratch* 缓冲区中打印,而不是在回显区中打印(否则您将在回显区中看到类似于这样的内容:^Jgazelle^J^Jgiraffe^J^Jlion^J^Jtiger^Jnil
,其中每个 ‘^J’ 代表一个换行符)。
您可以直接在 Info 缓冲区中评估这些表达式,回显区将增大以显示结果。
(setq animals '(gazelle giraffe lion tiger)) (defun print-elements-of-list (list) "逐行打印 LIST 的每个元素。" (while list (print (car list)) (setq list (cdr list)))) (print-elements-of-list animals)
当您按顺序评估这三个表达式时,将看到以下结果:
gazelle giraffe lion tiger nil
列表的每个元素都打印在自己的一行上(这是函数 print
的作用),然后打印函数的返回值。由于函数中的最后一个表达式是 while
循环,而且由于 while
循环总是返回 nil
,因此在列表的最后一个元素后打印了一个 nil
。