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