数组 – 如何在Clojure中实现For循环

我想在Clojure中实现这个小代码,但我正在努力:

struct mystruct {
   int id;
   int price;
};

mystruct mydata[10];

for (int i=0; i<10; i++) {
  myfunction(mydata[i].id, mydata[i].price);
  //other things...
}

我是Clojure的初学者,对我来说这样做很简单,真的很复杂,但是我真的很想尽可能地学习,因为我知道Clojure有很大的优势,比如使用refs …

如果有人可以帮助我,我真的很感激。谢谢!!

将循环命令式转换为Clojure的一种方法是使用for宏。

(for [i (range 10)] (inc i))

上述函数将返回0到9之间的所有数字,递增1。但是,您似乎只想迭代一个顺序集合并使用每个项目。如果这是您需要的,那么您不需要引用索引值,而是可以直接引用每个项目。

(for [d my-vec-of-data] (my-function d))

然而,对于这种简单的情况,map函数可能是一个更好的选择,因为它被设计为使用集合中的参数调用函数。以下示例相当于上面的使用。

(map my-function my-vec-of-data)

两者都映射并返回由my-function返回的值组成的值的集合。这是因为Clojure的数据结构是不可变的,所以有必要返回一个新的集合。如果这不是你需要的,或者如果你的功能有副作用,你可以使用doseq而不是返回零。

翻译自:https://stackoverflow.com/questions/9981943/how-to-implement-a-for-loop-in-clojure

转载注明原文:数组 – 如何在Clojure中实现For循环