gpt4 book ai didi

clojure - 按索引解构向量

转载 作者:行者123 更新时间:2023-12-02 13:42:29 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以通过索引解构向量。基本上,这是一个可以让我避免的简写:

(defn f [v]
(let [x (nth v 4)
y (nth v 5)]
(println x y)))

这是我的基本问题:

user=> (defn f [{x 4 y 5}] (println x y))
#'user/f
user=> (f [0 1 2 3 4 5 6])
4 5
nil
user=> (f (apply vector (range 10)))
4 5
nil
user=> (f (range 10))
5 nil
nil
user=>

最佳答案

回答有关解构向量的原始问题:

向量是关联的,因此您可以使用关联解构:

(let [{x 4 y 5} [0 1 2 3 4 5 6]]
[x y])
;= [4 5]

响应下面的评论,这适用于任何解构形式工作的地方,包括在 fn 参数列表中:

((fn [{x 4 y 5}] [x y]) [0 1 2 3 4 5 6])
;= [4 5]

回答有关解构 seq 的新问题:

如果将 seq 传递给上面定义的函数而不是向量,则将应用 seq 的关联解构规则。也就是说,seq 首先会被倒入 HashMap 中 -- (range 10) 在这个阶段变成 {0 1 2 3 4 5 6 7 8 9} --然后这个 HashMap 将被解构为映射。

无法通过索引解构 seq。这是设计使然,因为 seq 不适用于需要快速随机访问的应用程序。

关于clojure - 按索引解构向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364021/

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