Vector 向量Clojure算法

Vector 向量Clojure算法,vector,clojure,Vector,Clojure,我试图在clojure中对向量运行一些算法,但我似乎无法使任何一个都起作用。我有这些向量 locs - [[3 3] [5 5] [1 1] [2 2]] tlocs - [[2 2] [4 5]] rng - [2] 我想做的是在LOC上迭代或重复,并获取第一组数字,并对照第一组TLOC进行检查,看看它们是否在rng中的数据范围内。例如,在第一次循环中,它会检查[3]是否在[2]范围内,然后检查[5]是否在[2]范围内,而不是在[2]范围内。一旦我针对tlocs中的第一组完成了所有lo

我试图在clojure中对向量运行一些算法,但我似乎无法使任何一个都起作用。我有这些向量

locs -  [[3 3] [5 5] [1 1] [2 2]]
tlocs - [[2 2] [4 5]]
rng -   [2]
我想做的是在LOC上迭代或重复,并获取第一组数字,并对照第一组TLOC进行检查,看看它们是否在rng中的数据范围内。例如,在第一次循环中,它会检查[3]是否在[2]范围内,然后检查[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)))))
(解除检查[locs tlocs rng 0]
(环路[locs tlocs rng 0]

(这里有一种方法可以写:

(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))))

但是,我仍然不确定这是否是您想要的。
范围内?
没有检查
loc
tloc
之间的欧几里德距离;它只是确保它们在每个维度上的坐标之间的绝对差小于
rng

您能指定“范围内”的含义吗?为什么
[3 3]
[2]
范围内,而
[5 1]
不在范围内?如果函数
检查
:参数列表中不允许0。
循环
看起来非常危险:你阴影
locs
rng
参数。在范围内,例如,距离为米,最大范围为2米,[3]距离[2]只有1米。但是[5],5-2=3超出了范围,因为它超过了2。但是它在第二个tloc[4 5]的范围内,你希望结果是什么?真的是真的还是假的,我试图表示一个图,看看它是连通的还是在范围内。所以[1 2]是图表上的位置,我想看看它们是否在range@Freeman等等,
[2]
图形上的一个位置?还是一个范围?从你之前的评论来看,这听起来可能两者都有?这有什么用?是的,这就是我想要的,我想我解释得不是很好。我希望每个维度的坐标都小于范围。只是确保它们不会太远
(def locs [[3 3] [5 5] [1 1] [2 2]])
(def tlocs [[2 2] [4 5]])
(def rng 2)

(check locs tlocs rng) ;=> false