scheme - 如果程序只有一个,是否有任何默认参数?
问题描述
有人可以解释以下表达式
> (+)
0
> (+ 1)
1
> (- 1)
-1
> (/ 1)
1
> (/ 2)
1/2
> (/ 3)
1/3
如果有一个默认参数 1,为什么(+ 1)
return 1
while (/ 2)
return 1/2
?
不应该(+ 1)
回来2
吗?
解决方案
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"
,尽管它可能不是一种非常有用的语言。
推荐阅读
- json - 需要使用一个 AWS CloudFormation 模板为不同的环境启动多个实例
- asp.net-mvc - 什么是 IIS 站点下的应用程序,我们应该何时创建它?
- angular7 - 类型'HttpClient'Angular 7上不存在属性'post'
- c - 不能只释放一个动态分配的元素
- css - 为什么 gulp 不从 node_modules 中提取 css?
- c# - PlayerStats.Valid 不返回 true
- asp.net - 如何在存储在 azure 文件存储中的文件中写入/修改/添加一些文本?
- css - 不同的材质图标样式不对齐
- android - Ionic v4 Play 商店 android.permission.READ_PHONE_STATE
- html - 如何在可调整大小的 SVG 背景上放置一个图形按钮,考虑纵横比?