最基本的类型是 int, 操作符只有 +
现在想实现 f, 支持 f + 3 / f + f 的操作
由于动态类型, 比如 py, js 实现起来太简单了, 这里拿 rust 写.
最后效果:
由于用 Box / Arc / Rc 都需要写一堆 Clone, 为了美观, 直接操作 Box into_raw, 用指针就能直接 Copy 了, 封一个函数
Lambda 结构体当容器.
实现 identity 作为 Default
附加一个构造 + 调用
下面高潮来了, 因为 f + f 和 f + 3 不是同一个 Add, 所以分别写
给 Add self type 写
给 f : T → T 的 T 写
其实这里实现了相等 rank 和 sub rank 的算符.
于是我们就实现了 f x = x, f + 3 和 f + f 的代码.
但是在这种构造下, 我们如何实现 f f 呢
答案是
一个小问题, 这里 apply 和 call 对应了不同的类型, 如何用”重载”统一, 留作思考.
附 godbolt link
以及感谢 claude 3.5 sonnet (New) 的指点