【问题标题】:Clojure List -> VectorClojure 列表 -> 向量
【发布时间】:2015-10-25 14:56:33
【问题描述】:

我需要创建一个函数。在此范围内,我需要发生以下情况:

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

以上是列表。我需要忽略每个列表的第一列(这是 a、c 和 d。),然后将第二列放入向量中。然后对第 3 列执行相同操作,但使用单独的向量。完成此操作后,我将在两者之间进行一些小算术运算,并将每个结果写入第三个向量。

我几乎没有 Clojure 经验,并且来自 Java 背景。我试过用let

通过这样做,我只能创建一个 var,它仅将第二个和第三个项目存储在一个列表中。 (例如,列表 1 的 5 和 6。)但是我需要向量为 [5 8 4]

【问题讨论】:

  • 这听起来像矩阵算术。根据您还想对数据做什么,core.matrix 可能有用。

标签: vector clojure


【解决方案1】:
(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 是一个函数,它采用所需的两个向量并返回第三个向量。

【讨论】:

  • 你能帮我看看你的答案吗?所以列表 1、2 和 3 都在一个列表中。所以列表列表。它们会作为这样的参数放入函数中吗?如果它是一个列表列表,这会改变你的答案吗..
  • 我已经声明了一个可变参数函数来收集lists 中的三个参数列表。 (answer list-1 list-2 list-3) 是预期的调用。等效声明为 (defn answer [list-1 list-2 list-3] (->> [list-1 list-2 list-3] ...;(as above)
  • 如果输入是列表列表,您应该只使用 (defn answer [lists] ...) 并调用它 e。 G。 (answer [list-1 list-2 list-3])
  • 我会试一试,我相当有信心我会努力实现它,所以我会保持开放一段时间!
  • 如何为小算术做这个函数?
猜你喜欢
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多