emacs lisp中空列表的乘法

emacs lisp中空列表的乘法,emacs,lisp,scheme,Emacs,Lisp,Scheme,为什么在lisp(我知道的Emacs lisp和Scheme)结构中像(*)返回1 我在这里乘什么?没有参数,我如何调用这个函数?这是一个数学约定:根据定义,是一个;请注意,其中一个是乘法的标识元素(1×a=a×1=a)。这很方便,因为您可以使用数量可变的参数调用*,而不用担心没有参数的情况 类似地,空数列的和为零,即加法的标识元素。尝试在Lisp提示符下发出(+)。这是从数学继承的属性。就像加法一样,你可以把任意数量的数字加在一起,特殊情况是不把任何数字加在一起就得到了零和 同样,对于乘法,如

为什么在lisp(我知道的Emacs lisp和Scheme)结构中像
(*)
返回
1


我在这里乘什么?没有参数,我如何调用这个函数?

这是一个数学约定:根据定义,是一个;请注意,其中一个是乘法的标识元素(1×a=a×1=a)。这很方便,因为您可以使用数量可变的参数调用
*
,而不用担心没有参数的情况


类似地,空数列的和为零,即加法的标识元素。尝试在Lisp提示符下发出
(+)

这是从数学继承的属性。就像加法一样,你可以把任意数量的数字加在一起,特殊情况是不把任何数字加在一起就得到了零和

同样,对于乘法,如果你将任意数量的数字相乘,你将得到乘积。为了使它不适用于任何数字,使用1作为基值(它在数学中有一个奇特的名字,我很多年前就忘记了)

那么,这在编程语言中有什么实际用途吗。是的,因为您可以使用任意数量的参数调用像
+
*
这样的函数,所以我会说是的。例如:

(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

(*(+(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(*)(+(*)(*)(+(*)(*)(*)(+(*)(*)(*)(*)(+(*)(*)(*)(*)(*)(*)(*)(*)(*)))(//code>@EliBarzilay:这是野兽的性别吗?(是,也是最短长度版本…)注意:在Scheme中,必须删除操作符前面的
,)才能运行示例。例如,
(apply+'())
而不是
(apply'+'())