Clojure列表 -> 向量

4

我需要创建一个函数。在这个函数内,我需要实现以下功能:

List 1: '(a 5 6)
List 2: '(c 8 10)
List 3: '(d 4 9)

上面是列表。我需要忽略每个列表的第一列(即a,c和d),然后将第二列放入向量中。然后对于第三列也做同样的操作,但是要放入另一个向量中。完成后,我将在两个向量之间进行一些小算术运算,并将每个结果写入第三个向量中。
我几乎没有Clojure经验,并且来自Java背景。我尝试使用“let”。通过这样做,我只能创建一个变量,其中仅存储单个列表中的第二个和第三个项目(例如,列表1的5和6)。然而,我需要向量为[5 8 4]。

这听起来像是矩阵运算。根据您想要对数据执行的其他操作,core.matrix可能会很有用。 - Mars
1个回答

4
(defn answer [& [list-1 list-2 list-3 :as lists]]
   (->> lists                    ; ((a 5 6) (c 8 10) (d 4 9))
        (map rest)               ; ((5 6) (8 10) (4 9))
        (apply map vector)       ; ([5 8 4] [6 10 9])
        (apply small-arithmetic) ; (small-arithmetic [5 8 4] [6 10 9])
  ))

假设small-arithmetic是一个接收两个向量并返回第三个向量的函数。

2
你能否简单地向我解释一下你的答案?所以列表1、2和3都在一个列表中。也就是说,它们是一个列表的列表。它们会作为参数放入函数中吗?如果它是一个列表的列表,这会改变你的答案吗? - DoogJames
我已经声明了一个可变参数函数,用于收集lists中的三个参数列表。 (answer list-1 list-2 list-3)是预期的调用方式。等效的声明应该是(defn answer [list-1 list-2 list-3] (->> [list-1 list-2 list-3] ...;(如上所述) - Leon Grapenthin
我会试一下,但我相当自信我在实现它方面会遇到困难,所以我会保持开放一段时间! - DoogJames
我指的是实际函数中的算术运算 :3 - DoogJames
我将在两个数之间进行一些小算术运算,并将每个结果写入第三个向量中。如果您不具体说明,我无法帮助您。 - Leon Grapenthin
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接