2016-11-02 5 views
0

私は約束のリストに文のリストを送ろうとしています。インデックス変数を使用して2つのリストを反復処理する方法は?

文章Defintion:

(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?"] 

私はPASにしたいです文章中の対応する約束事に句読点のすべての記入。私はn

をアップカウントする方法を見つけるカントClojureのに非常に新しいですので、私は基本的に、私は二つのリストを反復処理するためのClojureの方法を探しています

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

のような何かをする方法を探していますインデックス変数などを使用します。

+3

は、なぜあなただ​​けの両方のコレクションの上にマッピングされていない書くでしょうか? (マップはパースされたセンテンスを送る)? – leetwinski

+0

@leetwinskiありがとう私はこれが可能であることを知らなかった –

+0

'map-indexed'を参照してくださいhttp://clojuredocs.org/clojure.core/map-indexed –

答えて

-1

あなたが探しているものはおそらく地図インデックスされています。それが取る関数は2つのパラメータを持っているので、(fn [idx, el] (dosomething idx el)の行に沿って何かがあります。一度に複数のコレクションにマップすることもできます。要素の各セットは、(c1e1, c2e1,..., cNe1)(コレクションの場合はc、コレクションの要素の要素の場合はe)のようなタプルとして配信されます。

あなたはすでにあなたは(あなたが nを知っているように、明らかに不可能である事がスコープ内にない)だけではなく、 sentences(nth sentences n)書いたことを除いて、答えを自分で半書かれている
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. 
0

map機能は、最も一般的に、正確に一つの配列の引数で呼び出されますが、複数で呼び出されたときには、[(f x0 y0) (f x1 y1) (f x2 y2) ...]を返して、いくつかの他の言語でzipWithとして機能しています。ゼロシーケンス引数を使ってmapと呼ぶこともできますが、代わりにトランスデューサです。

だから、あなたは単に

(map deliver sentences parsedSentences) 
+0

あなたは正しいと私の質問をした後に私は正確にこれをしたが、私の特別なケースでは、私はインデックスが成長しなければならない無限のリストを使用しているので、これはうまくいきませんでした。 最後に、次のコードを使用しました。 (DEF sentenceCounter 0) (DEF文章は(繰り返し)約束)(doseq [文parsedSentences](提供(n番目の文章sentenceCounter)文を)(DEF sentenceCounter(INC sentenceCounter))) たぶん、あなたは私のコードを置くことができますあなたの答えはあなたの答えを正しいものとしてマークします。 –

関連する問題