は、私は、インデックスワード機能の中にパイプに品詞関数の出力をしようとして使用して出力結果を印刷しています( - >)スレッドマクロ:- >(スレッド)マクロを使用してClojure iterator-seqをパイプする方法は?
(defn parts-of-speech []
(seq (. POS values)))
(defn index-words [pos]
(iterator-seq (. dict getIndexWordIterator pos)))
(-> (parts-of-speech) index-words println)
しかし、インデックスの言葉をfuncはiterator-seqを返します。私はClojureを初めて使用しているので、このコンテキストで反復する方法はわかりません。
EDIT:提案ごとにコードが更新されました。
UPDATE:私は来
(->> (parts-of-speech) (map index-words) (map println) doall)
(doseq [w (map index-words (parts-of-speech))]
(println w))
:@kotarakと@のjayunit100とコメント@ sw1nnからと@のマルコ・topolnikから回答へ
おかげで、私は仕事、少なくとも2つのバリエーションを持っていますこの質問の私の目標は、より多くの慣用的なClojureを書くためにスレッドマクロを理解することです(スレッドマクロを試す前に、複数のdoseq
とlet
を使って各シーケンスをループしていました)。
コメントから、スレッドマクロはこれを行うための最も慣用的な方法ではないかもしれませんが、私はそれを理解してこのギャップを埋めることができるようにする方法を見たいと思います。
(doseq [w (map index-words (parts-of-speech))]
(println (count w)))
;= 117798
;= 11529
;= 21479
;= 4481
どのようになります:4つの項目のシーケンスを返し、あなたが(println (count w))
代わりの(println w)
をすれば、あなたはそれではなく一つの連続配列より4つの系列の数を出力します見ることができます(parts-of-speech)
また
、 4つのシーケンスの内容を印刷するのではなく、単語の1つの連続したストリームを印刷するように上記を修正しますか?
BTW:上記のコードは、MIT Java WordNetライブラリ(http://projects.csail.mit.edu/jwi/)をラップしています。
質問はまだ開いていますか?これは正しいコードのようです。シーケンスは印刷されませんか?あなたのコメントに答えるには:クローーザではイテレータを使用しません。 Seq反復は 'doseq'で達成されます。あなたが望むなら、あなたは '(doseq [w(インデックス単語(品詞)](println w))'と言うことができます。 –
ネイティブJava配列のBTW反復処理は、clojure - すべて* seqable *、つまり。 –