17 hours ago
- 文章演示了如何使用带标签的数据支持复数的多种表示形式(直角坐标和极坐标),灵感来源于SICP的2.4.2节。
- 初始实现模仿了Lisp的动态类型,使用cons细胞、attach_tag、type_tag和contents函数。
- 构造函数make_rectangular和make_polar创建带标签的对,提取函数利用三角函数进行转换。
- 通用函数(real_part、imag_part、magnitude、angle)根据标签分派,处理两种表示形式。
- 然后通过用Haskell的静态类型系统替换动态类型来优化代码:使用元组、模式匹配和Double值。
- 最后引入原生代数数据类型(Complex),消除自定义标签,将代码从80行精简到30行。
- 文章指出这种方法并不理想,并暗示了数据导向编程作为一种替代方案。