1

同僚のプロジェクトを継続して以来、私はこの 1 週間、Clojure を使用しています。Clojure を使用していくつかのファイルを生成しています。彼はすぐにそれをしなければならず、ほとんどの値をハードコーディングしなければならなかったので、私はいくつかのコードをリファクタリングしようとしています。ので、私は持っています:

(defn gen [a b] (...))

そして、それを次のようなものでラップしたい

(defn gen-vector [a-vec b-vec] (...))

gen_vectorを「メイン」にします。つまり、次のように記述して実行をトリガーします。

(gen-vector [1 2] [3 4])

のすべての組み合わせを取得することを期待していますgen。実行するようなものです。

(gen 1 3)
(gen 1 4)
(gen 2 3)
(gen 2 4)

私がこれまでに持っているのは

(map #(gen %1 %2) countries fieldchar)

しかし、それは 1-3、2-4 のみを行うため、トリックを行うようには見えません。これを実装する方法についてのアイデアはありますか?

よろしく、 ディミ

4

1 に答える 1

5

の値の遅延シーケンスを取得するには、次(gen x y)を使用します。

(for [x x-vec
      y y-vec]
  (gen x y))

gen有用な戻り値のない副作用のために呼び出された関数の場合はfordoseq.

forそしてdoseq、それらの基本的な形式では、1は、入力シーケンスのデカルト積の各タプルについて本体を評価します。(map f xs ys ...)対照的に、シーケンス内の一致する位置にある要素のタプルのみが使用されるように、ロックステップでシーケンスをトラバースします。


1:whenフィルタリング ( )、ループの早期停止 ( )、およびバインディング ベクター内からの:whileローカル バインディングの導入( )のためのミニ言語もあります。:let構文の概要についてはを参照してください。また、 およびを含む例について(doc for)は、おそらくこの最近の私の回答を参照してください)。:when:while

于 2013-05-20T12:51:53.557 に答える