首页 > 解决方案 > 如果程序只有一个,是否有任何默认参数?

问题描述

有人可以解释以下表达式

> (+)
0
> (+ 1)
1
> (- 1)
-1
> (/ 1)
1
> (/ 2)
1/2
> (/ 3)
1/3

如果有一个默认参数 1,为什么(+ 1)return 1while (/ 2)return 1/2

不应该(+ 1)回来2吗?

标签: schemelispracket

解决方案


For+*隐含的默认第一个参数是它们表示的数学运算的单位元素,它们是对各种数字字段的加法和乘法运算。因为+这是0数字加法组的标识元素;因为*这是1数字乘法的恒等元。

所以

  • (+)(+ 0)0;
  • (+ 1)(+ 0 1)1;
  • (*)(* 1)1;
  • (* 2)是。(* 1 2)_2

For-/隐含的默认参数是它们的逆操作的适当标识,尽管这些函数需要至少一个参数,并且它们的行为与多个参数并不那么简单。

所以

  • (-)是一个错误(我不明白为什么不应该0);
  • (- 1)(- 0 1)-1;
  • (- 1 2)不是;_ (- 0 1 2)
  • (/)是一个错误(我不明白为什么不应该1);
  • (/ 2)(/ 1 2)1/2;
  • (/ 3 2)不是。_ (/ 1 3 2)

确切地说,在 Scheme 上下文中,默认参数是代表我认为的身份的确切数字。

请注意,这些默认参数只是为了数学方便而选择的:这不是语言设计中固有的东西。我可以定义一种语言 where (+)is "foo",尽管它可能不是一种非常有用的语言。


推荐阅读