我正在嘗試編寫一個名爲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
的替代方案,是否最好傳遞第二個函數來生成缺失值(例如:在我的示例中爲#(identity "--")
)?
使用案例:我正在寫一個小型的文本蜘蛛紙牌播放器作爲學習Clojure /函數式編程的練習。我需要能夠顯示遊戲tableaus(純粹主義者的tableaux :-))。
'(未每零首創?)' - 它不會像[ 'C1' C2零「C3〕序列工作。 – ffriend 2010-12-16 14:41:56
@朋友:你能給一個測試代碼嗎? – 2010-12-16 14:43:11
試試這些序列:['a1'a2 nil] ['b1'b2] ['c1'c2 nil'c4]。你可以在計算'firsts'並用'(map first-or-val(conj colls c1))'替換計算'firsts'本身之前檢查'(every?empty?cols)'來修復它(見我的答案)。 – ffriend 2010-12-16 15:21:14