我有一个函数,它会检查 CSV 文件中的城市是否拥有超过 500000 的人口。我将所有找到的城市保存到向量中,但现在想要两次遍历该向量,以查找彼此靠近(小于 500 公里)的城市对(我已经有一个检查两个城市是否接近的函数)。以下是我目前的代码:
(defn closest-city-pairs []
(with-open [rdr (reader)]
(vec
(for [line (drop 1 (line-seq rdr))
:let [y (string/split line #",")]
:when (= true (large(y 0)))]
(let [newVec (conj [] (y 0))]
(for[x newVec
y newVec
:when (= true (close x y))]
(let [newNewVec (conj [] (x y))]
(println newNewVec))))))))
它似乎不想打印,但我的逻辑和所有括号似乎都是有道理的,而且也是按顺序的?任何帮助都将是非常好的。
for
并不是你从命令式语言中所知道的那样。它是一个“列表推导式”。你不必在那里“停止”新的let
- 只需在末尾添加另一个:let
,并继续在第一个for
内部(但我怀疑这不是你想要的 - 你现在有三个嵌套循环)。将数据的读取移动到一个函数中,然后移动过滤操作,最后只在最后找到接近的数据。拥有小型、纯净、适当命名的函数可以使测试和实验变得更加容易。 - cfrick