第一次课后作业
一. 请给出 Java 语言哪些值是头等程序对象,哪些值不是?为什么?
在程序语言学中把相当于数学对象的程序对象叫做头等对象,因为它们作为运算对象的
权利未受到任何限制。程序对象的权限具体说来是: 可作为操作数出现在表达式中求值。
可作为单独的存储实体。可作为参数传递到过程或函数。可作为函数返回值。可以构成复杂
的数据结构。
Java 中的头等对象:
1. java 基本数据类型(6 个整数型,2 个浮点型,1 个字符类型,1 个布尔类型)的实例是
头等对象,因为他们满足头等对象的要求,相当于数学对象进行操作。
2. java 中类的实例对象是头等对象。
3. 数组对象,映射对象等。
Java 中的非头等对象:
1. 函数抽象,因为他们不能作为返回值。
2. 数组元素,不是可存储体,也不能作为函数返回值。
3. 类,同样不能作为函数返回值。
第二次课后作业
1. 计算对象的实现-存储
- 请给出 R 语言和 python 语言中哪些值是可存储值,哪些是不可存储值。
可存储值,指最小可直接访问的可存储单元中的值。
R 语言:
可存储值:
- 双整型(double)、整型(integer)、字符型(character)、逻辑型(logical)、
复数类型(complex)以及原始类型(raw).
不可存储值:
- 向量、因子、矩阵、数据框、多维数组、列表、时间序列
Python 语言:
可存储值:
- 数值类型,字符类型,布尔类型
不可存储值:
- 列表,元组,字典,集合
- 请给出 R 语言和 Python 语言中的存储模型和存储管理机制。
R 语言:
存储模型: 静态存储(全局变量),动态存储
存储管理机制:R 语言对象存储在内存的两个不同的地方,一种是堆内存一种是地址对。
Python:
存储模型: 静态存储 使用 global 声明的全局变量
动态存储模型:数组,字典
存储管理机制:使用引用计数进行垃圾回收,当指向某一对象的引用计数为 0 后,对
象会被回收到 python 内建的内存池,当程序再次申请内存时,会从内存池中分配,
加快效率。
2. 计算对象的连接—束定
- 请给出 R 语言和 Python 语言中采用的束定机制和作用域规则。
R 语言:束定机制是无类型语言的束定机制,作用域规则是词法作用域
Python 语言和 R 语言采用了相同的束定机制和作用域规则。
一个变量名可以完全动态地束定到任何类型的值或操作集上。
在 python 中还有不同的设定,在 python 中,赋值语句就是约束建立的地方,一个约束在
程序正文中是否起作用是由该约束在文本中的位置决定的,而不是在运行时动态决定的,因
此 python 是具有静态作用域,也叫做词法作用域。
python 作用域采用了 LEGB 规则,按照 local 域->enclosing 域->global 域->builtin 域的顺序
查找名字对应的约束。