欢迎!请查看关于页面以了解更多关于此的工作信息。
从理论角度看,Map和1元函数之间实际上没有区别
您如何看待函数实现Map接口?这将是有用的吗?如果已经考虑过但大家决定不这样做,为什么呢?我很想了解这种思考过程。
将事物变成函数有许多实用性,因为这主要是“您可以调用的东西”的抽象。将函数变成数据(Map)的实用性就少多了。您不能像数据那样轻松地读取/打印它们,通常不能与其他数据组合等。此外,尽管所有Map都可以作为查找函数来调用,但并非所有函数都可以作为Map来调用,因此这只能应用于非常有限的函数集。因此,我认为这是没有用的,我没有看到从这样做中能获得任何好处。
您正在尝试解决什么问题?
从语义上讲,Map的一些属性无法投射到函数上。Map有元素的计数,允许枚举它们包含的所有元素,这不能用函数来完成。
我看到的另一个缺点是get的不可预测的复杂度。目前调用map上的get,您可以期望操作速度合理。在(get itentity 1000)的情况下是这样的,在(get #(do (Thread/sleep %) %) 1000)情况下则不然。我喜欢Clojure可预测的执行时间,比如conj,它保证是O(1),但不保证项目会被插入到末尾。
get
(get itentity 1000)
(get #(do (Thread/sleep %) %) 1000)
conj