gpt4 book ai didi

clojure - 在 Clojure 中旋转列表列表矩阵

转载 作者:行者123 更新时间:2023-12-02 08:22:16 25 4
gpt4 key购买 nike

我对 Clojure 和函数式编程总体来说是新手。我不知道如何以功能性的方式处理这个问题。

我有以下矩阵:

(def matrix [[\a \b \c]
[\d \e \f]
[\g \h \i]])

我想把它改成这样(逆时针旋转):

((\a \d \g)
(\b \e \h)
(\c \f \i ))

我已经修改了这一点,它以正确的顺序提供了元素。如果我可以通过这种方式收集字符串中的数据,那么我可以用分区将其分割。不过我很确定doseq 是错误的路径:

(doseq [i [0 1 2]]
(doseq [row matrix]
(println (get (vec row) i))))

我尝试过嵌套 map 调用,但一直陷于困境。在 Clojure 中构建字符串或以更好的方式处理该字符串的正确方法是什么?

最佳答案

您想要实现的目标听起来像 transpose 。我建议

(apply map list matrix)
; => ((\a \d \g) (\b \e \h) (\c \f \i))

它有什么作用?

(apply map list '((\a \b \c) (\d \e \f) (\g \h \i)))

相当于

(map list '(\a \b \c) '(\d \e \f) '(\g \h \i))

它获取三个列表中每个列表的第一个元素,在它们上调用 list,然后获取第二个元素,在它们上调用 list...An 返回以这种方式生成的所有列表的序列。

更多两个例子 applymap可以在 ClojureDocs 上找到。

关于clojure - 在 Clojure 中旋转列表列表矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314789/

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