gpt4 book ai didi

vector - 为什么向量实现关联?

转载 作者:行者123 更新时间:2023-12-01 07:24:00 25 4
gpt4 key购买 nike

我惊讶地发现 clojure向量实现了关联接口(interface)。

(associative? [1 2 3]) ; => true

我假设这个接口(interface)提供了优化的键索引。按照这个假设,该接口(interface)似乎适用于 map 数据结构,但对于向量来说很奇怪,在我看来,它不遵循键值启发式。

我的心智模型是 Associativevector的执行不正确?这种设计选择的目的是什么?

最佳答案

最初可能看起来并不直观,但向量由它们的索引键控,这允许它们使用所有标准的关联函数。这使得对它们进行简单的操作变得非常容易:

(def v [1 2 3])

(assoc v 1 4)
[1 4 3]

(update v 1 inc)
[1 3 3]

(get v 1) ; The same as (v 1)
2

或者,如果您有一个 2D 向量:
(def v [[1 2 3]
[4 5 6]
[7 8 9]])

(assoc-in v [2 1] 0)
[[1 2 3]
[4 5 6]
[7 0 9]]

如果没有这种设计选择,则需要创建一整套单独的函数并将其专门用于向量。拥有标准化的接口(interface)允许您编写不关心具体正在处理什么结构的函数。

这样想:假设您想编写一个“替换”向量元素的函数。它的签名与现有的 assoc 有什么不同吗?功能;除了特别期待一个向量?

关于vector - 为什么向量实现关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com