欢迎!请查看关于页面了解这个功能的一些详细信息。
从理论角度来看,Map和一元函数之间实际上并没有区别
您觉得将函数实现为Map接口怎么样?会有用吗?如果是这样的想法,但你们决定不这样做,为什么?我很想了解这个想法。
将事物做成函数有很多用途,因为这是“你可以调用的东西”的主要抽象。将函数变成数据(Map)的用途要少得多。你不能像数据一样轻松地读取/打印它们,通常不能与其它数据组合等。另外,虽然所有Map都可以作为查找函数调用,但并非所有函数都可以作为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