lisp语言运行总是只产生最后一步的结果

(let ((count 3))
  (while (> count 0)
    (message "%d" count)
    (setq count (1- count)))

上面这个语句,我在ielm里交互运行也只产生最后一步结果nil,在scratch里按C-x C-e也只最后一步nil这个结果。按理说应该是3,2,1, nil四个结果。

2021-04-30 21-11-16屏幕截图 2021-04-30 21-10-40屏幕截图

nil 是返回值, 3、2、1是程序运行过程中产生的副作用

message 输出的结果应该在 *Messages* buffer里面看。输出的值 和 返回值 不是一个概念。

1 个赞

明白了,谢谢。刚接触lisp,很多不适应的地方。

谢谢,刚接触elisp

再请教一下,您的图上minibuffer里为何显示所有结果?我的minibuffer也只显示中间最后一步计算结果,但是在Message页面可以看到所有结果。

图上的不是 minibuffer, 就是 Messages buffer

谢谢, 那我都明白了。非常感谢论坛和论坛中的成员的帮助