Sha*_*ark 5 collections function clojure
丰富的矢量,映射和设置功能,而列表和序列不是功能.为什么不能将所有这些集合都用于使其保持一致?
此外,为什么我们不将所有这些组合数据作为将位置映射到其内部数据的函数?
如果我们将所有这些组成数据作为函数,那么在clojure中将只有函数和原子数据.这将最大限度地减少该语言的基本要素吗?
我相信一个最小的,最好的只有2套基本元素会使语言更简单,更具表现力和更灵活.它是否正确?
向量,映射和集合都是关联数据结构.地图是最明显的; 他们只是将任意键与任意值相关联.向量可以被认为是一个映射,其键集必须是小于向量大小的所有非负整数的集合.最后,可以将集合视为将键映射到自身的映射.
重要的是要理解向量的顺序性质和向量的关联性质是两个正交的事物.它是一种数据结构,旨在善于支持两种抽象(在某种程度上;例如,您无法在向量的开头有效插入).
列表比矢量简单; 它们是有限的顺序数据结构,仅此而已.列表无法在特定索引处有效地返回元素,因此它不会将该功能作为其核心接口的一部分公开.当然,您可以使用索引获取列表的元素nth,但在这种情况下,您明确将其视为序列,而不是关联结构.
因此,为了回答你的问题,IFn矢量,映射和集合的实现是存在的,因为关联数据结构的概念与纯函数的概念之间存在极其密切的关系.列表和其他序列本质上不是关联的,因此为了保持一致性,它们不会实现IFn.