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