如果过程只有一个,是否有任何默认参数?

MMM*_*VII 0 lisp scheme racket

有人可以解释以下表达式吗

> (+)
0
> (+ 1)
1
> (- 1)
-1
> (/ 1)
1
> (/ 2)
1/2
> (/ 3)
1/3
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

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 (+)was "foo",尽管它可能不是一种非常有用的语言。