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