Vector 向量Clojure算法
我试图在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
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