我是 Clojure 的新手,会帮助处理一些代码。我有一个接受向量的函数,我想遍历向量并获取索引“i”处的值和“i”本身的值。'i' 是在循环中递增的值。
我在Clojure的文档检查“为”在对和写了下面的代码。
(for [i some-vector]
(print (get-intersec i (.length some-vector) loop-count)))
Run Code Online (Sandbox Code Playgroud)
循环计数变量应该是循环计数。
我也检查了循环,但它似乎不是一个可行的解决方案。有人可以帮助我使用我可以使用的 clojure 函数,或者帮助我编写可以执行此操作的宏或函数。
谢谢你。
Ps:为了解决我的问题,我使用自己的计数器,但想要更好的解决方案。
首先,请记住这for是用于列表理解,即创建新序列。为了循环遍历一个序列以获得一些副作用,比如打印,你可能想要使用doseq.
要在循环时包含每个元素的数字计数,您可以使用map-indexed:
(def xs [:a :b :c :d])
(doseq [[n elem] (map-indexed #(vector %1 %2) xs)]
(println n "->" elem))
Run Code Online (Sandbox Code Playgroud)
输出:
0 -> :a
1 -> :b
2 -> :c
3 -> :d
Run Code Online (Sandbox Code Playgroud)
如果你发现自己经常这样做,就像我一样,你可以创建一个宏:
(defmacro doseq-indexed [[[item idx] coll] & forms]
`(doseq [[~idx ~item] (map-indexed #(vector %1 %2) ~coll)]
~@forms))
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
> (doseq-indexed [[n elem] xs] (println n "->" elem))
0 -> :a
1 -> :b
2 -> :c
3 -> :d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |