如何使用索引变量迭代两个列表?

时间:2016-11-02 12:08:57

标签: clojure

我正在尝试将一系列句子提供给承诺列表。

句子定义:

(def sentences (repeatedly promise))
(future
  (doseq [sentence (map deref sentences)]
    (println sentence)))

交付:

(doall (map deliver (nth sentences n) (parsedSentences)))

示例:

n = 1
parsedSentences = ["This is a sentence." "Is this a sentence?"]

我想将parsedSentences的每个条目传递给句子中相应的promise。由于我对clojure很新,所以无法找到一种方法来计算n

我正在寻找一种方法来做类似

的事情
deliver(nth sentences 1)("This is a sentence")
deliver(nth sentences 2)("Is this a sentence?")
...
deliver(nth sentences n)( sentence n)

所以基本上我正在寻找一种使用索引变量或其他东西迭代两个列表的Clojure方法。

2 个答案:

答案 0 :(得分:0)

你自己已经写了一半答案,除了你写了(nth sentences n)(一个显然不可能的事情,因为你知道n不在范围内)而不只是{{1} }。

sentences函数通常只使用一个序列参数调用,但在使用多个函数调用时,它在其他一些语言中充当map,返回zipWith。你甚至可以用零序参数调用[(f x0 y0) (f x1 y1) (f x2 y2) ...],然后它就是一个传感器。

所以,你只需写

map

答案 1 :(得分:-1)

地图索引可能就是您正在寻找的内容。它所采用的函数有两个参数,所以就像(fn [idx, el] (dosomething idx el)一样。我相信你也可以同时映射多个集合,每组元素将作为一个元组来传递,如(c1e1, c2e1,..., cNe1)(c代表集合,e代表该集合中的元素正常)。

clojure.core/map-indexed
([f] [f coll])
  Returns a lazy sequence consisting of the result of applying f to 0
  and the first item of coll, followed by applying f to 1 and the second
  item in coll, etc, until coll is exhausted. Thus function f should
  accept 2 arguments, index and item. Returns a stateful transducer when
  no collection is provided.