hw7作业理解

这个作业的任务是对二维几何对象解释器的功能进行扩展。SML的功能基本上已经完成了,而Ruby的部分还没有完成。SML是通过函数+模式匹配来实现的。而Ruby是通过类+方法来实现的,包括了一些费脑的double dispatch和其他的dynamic dispatch,即OOP的风格。

语法:

5种数据类型+4种表达式。
5种数据类型分别是NoPoints, Point, Line(infinite), VerticalLine(x=?), LineSegment(finite, include four points)
4种表达式分别是Intersect, Let, Var, Shift。
Intersect(包括两个子表达式,求两个表达式的交点)。
Let和Var是SML中常用的两个表达式。
Shift(偏移表达式)。

关于浮点数相等的说明,如果两个浮点数的差值的绝对值小于0.00001,则认为这两个数相等。

表达式的预处理

等效表达式:
1.在LineSegment中,应该没有坐标相同的点。
2.在LineSegment中,左端点的x值应该比较小。如果两个端点的x值很接近,则左端点的y值应该比较小。

SML代码

添加预处理和Shift表达式。

Ruby代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容