私は、map-longest
(別名提案の感謝)と呼ばれるClojureユーティリティ関数を書こうとしています。この機能は、以下の「署名」があります:Clojure map-longest
(map-longest fun missing-value-seq c1 & colls)
をし、それが排出される最長まで供給コレクションの処理を継続するよりも除いて、map
と同様に動作します。最長よりも短いコレクションの場合、値がなくなるとmissing-values-seq
から取り込まれます。それは怠惰であるべきですが、無限のコレクションでは使用できません。
使用例:
(print (apply str
(map-longest #(str %1 \space %2 \space %3 \newline) (repeatedly "--")
["a1" "a2" "a3"] ["b1" "b2"] ["c1" "c2" "c3" "c4"])))
それは、次の出力を生成する必要があります
a1 b1 c1
a2 b2 c2
a3 -- c3
-- -- c4
を、私は間違ったコールを有することができます。
どうすれば実装できますか? clojure.coreまたはclojure-contribライブラリにはすでにこれがありますか? missing-value-seq
の代わりに、欠損値を生成するために2番目の関数を渡す方が良いでしょう(例:#(identity "--")
)。
使用例:私は、Clojure/Functional Programmingを学ぶ練習として、小さなテキストスパイダーソリティアプレーヤーを作成しています。私はゲームtableaus(純粋主義者のためのtableaux :-))を表示することができる必要があります。ここ
'(?ではない、すべてのゼロ初)' - それは[「C3 nil 'のC1 C2']のようなシーケンスのために動作しません。 – ffriend
@ffriend:テストコードを教えてもらえますか? –
これらの配列を試してください:['a1' a2 nil] ['b1' b2] ['c1' c2 nil 'c4]。 'firsts'を計算する前に'(every?empty?cols) 'をチェックし、' firsts'の計算を '(map first-or-val(conj colls c1))'(私の答えを参照)で置き換えることによって、修正できます。 – ffriend