0

ベクター複製の Clojure でテーブルを作成したい場合は、次のように記述します。

(take 2 (repeat [1 2 3]))

しかし、テーブル関数のこの概念を拡張して、次のようなものを構築するにはどうすればよいでしょうか。

入力 1: [a^2 2 6 2] ここで、a^2 は何らかの入力関数、2 は最小値、6 は最大値、2 はステップ サイズです。

出力 1: [4,16,36]

入力 2: [b^2 10 -5 -2]

出力 2: [100 64 36 16 4 0 4 16]

これは 4x3 行列を出力します

入力 3: [(+ (* 10 i) j) [1 4] [1 3]]

ここで (+ (* 10 i) j) は 10i+j (特定の入力関数) で、[1 4] は i の最小値と最大値、[1 3] は j の最小値と最大値です。

出力 3: [[11 12 13] [21 22 23] [31 32 33] [41 42 43]]

4

3 に答える 3

0

mapとで簡単に解決できると思いますrange

(defn applier
  [f ini max step]
  (map f (range ini (+ max step) step)))

(applier #(* % %) 2 6 2)
=> (4 16 36)
于 2013-11-21T02:39:03.427 に答える
0

このfnは3番目の例を解決できます

(defn your-fn [[ra1 ra2] [rb1 rb2] the-fn]
   (vec (map (fn [i] (vec (map (fn [j] (the-fn i j)) (range rb1 (inc rb2))))) (range ra1 (inc ra2))))
   )
(your-fn [1 4] [1 3] (fn [i j] (+ (* 10 i) j)))

=> [[11 12 13] [21 22 23] [31 32 33] [41 42 43]]

しかし、この動作を一般的なものにするために、もう少し仕様の詳細(またはユースケース)が必要です。問題をもう少し説明してください。1番目から2番目と3番目の例は、同じタイプのパラメーターと意味をとらないと思います( step vs seq )。したがって、@ Guillermo-Winkler は問題の一部を解決し、my-fn は最後の例をカバーします

于 2013-11-21T12:30:26.540 に答える