【问题标题】:Arithmetic on Vectors Clojure向量算术 Clojure
【发布时间】:2016-02-27 13:00:38
【问题描述】:

我正在尝试在 clojure 中对向量运行一些算术运算,但我似乎无法让它工作。我有这些向量....

locs -  [[3 3] [5 5] [1 1] [2 2]]
tlocs - [[2 2] [4 5]]
rng -   [2]

我想要做的是迭代或重复 locs 并获取第一组数字并与第一组 tlocs 进行检查,看看它们是否在 rng 中的数据范围内。因此,例如在第一轮中,它会检查 [3 3] 是否在 [2 2] 范围内,然后检查 [5 5] 是否在 [2 2] 范围内,而不是。一旦我针对 tlocs 中的第一组完成了所有 locs 值,它将再次执行,但使用 [4 5] 进行比较。

谁能帮我写一个这样的函数??

我尝试做这样的事情,但它不起作用而且看起来也不正确

(defn check [locs tlocs rng 0]
 (loop [locs tlocs rng 0]
  (<= (first t (first d)r)
   (recur (rest locs) (inc index)))))

【问题讨论】:

  • 你能具体说明“在范围内”是什么意思吗?为什么[3 3] 不在[2 2][5 1] 范围内?如果函数check: 0 不允许出现在参数列表中。 loop 看起来很狡猾:你影子 locsrng 参数。
  • in range as in,距离 so 米,例如最大范围是 2 米,[3 3] 距离 [2 2] 仅 1 米。但是 [5 5], 5 - 2 = 3 超出了范围,因为它超过了 2。但它在第二个 tloc [4 5] 的范围内
  • 你希望结果是什么?
  • 真的是假的,我试图表示一个图,看看它是否连接或在范围内。所以 [1 2] 是图表上的位置,我想看看它们是否在范围内
  • @Freeman 等等,[2 2] 是图中的位置吗?或者它是一个范围?从您之前的评论中,听起来可能两者兼而有之?这有什么用?

标签: vector clojure


【解决方案1】:

你可以这样写:

(defn in-range? [loc tloc rng]
  (every? #(<= % rng) (map (comp #(Math/abs %) -) loc tloc)))

(defn check [locs tlocs rng]
  (every? true? (for [tloc tlocs loc locs] (in-range? loc tloc rng))))

因此,对于tlocs 中的值和locs 中的值的每个可能配对,请检查loc 是否在tloc 的范围内。如果这些范围检查中的任何一个返回 false,则返回 false

例子:

(def locs [[3 3] [5 5] [1 1] [2 2]])
(def tlocs [[2 2] [4 5]])
(def rng 2)

(check locs tlocs rng) ;=> false

但是,我仍然不确定这是否是您想要的。 in-range? 不检查 loctloc 之间的欧几里得距离;它只是确保它们在每个维度上的坐标之间的绝对差小于rng

【讨论】:

  • 是的,这就是我所追求的,我认为我解释得不是很好。我在每个维度的坐标都小于范围之后。只是确保它们不会太远
猜你喜欢
  • 1970-01-01
  • 2014-02-27
  • 2012-11-27
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2015-05-17
相关资源
最近更新 更多