为什么在lisp中(我知道的是Emacs Lisp 和 Scheme) 像 (*)
这样的结构会返回 1
?
我在这里乘以了什么?我如何在没有参数的情况下调用这个名为 *
的函数?
这是一种数学惯例:根据定义,空序列的乘积为1;请注意,1是乘法的单位元(1×a = a×1 = a)。这很方便,因为您可以使用可变数量的参数调用 *
而不必担心没有参数的情况。
同样地,一个空序列中的数字之和为零,即加法的单位元。在您的Lisp提示符下尝试发出(+)
命令。
+
和*
这样具有任意参数数量的函数时,我会说是的。例如:(apply '+ '(2 3 4)) => 9
(apply '+ '(2 3)) => 5
(apply '+ '(2)) => 2
(apply '+ '()) => 0
(apply '* '(2 3 4)) => 24
(apply '* '(2 3)) => 6
(apply '* '(2)) => 2
(apply '* '()) => 1
(apply + '())
而不是(apply '+ '())
。 - Ryan Culpepper