2013-05-20 89 views
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。關於如何實現這個的任何想法?

問候, 低糜

回答

5

要得到(gen x y)值的懶序列,使用

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

如果gen被稱爲副作用有沒有有用的返回值的功能,你會想將for替換爲doseq

fordoseq以其基本形式在輸入序列的笛卡爾乘積中評估它們的身體。相比之下,(map f xs ys ...)以鎖步方式遍歷序列,使得僅使用序列中匹配位置處的元素的元組。


還有一個小型的語言用於過濾(:when),停止循環初期(:while)和將來自綁定矢量內部本地綁定(:let)。關於語法的概述參見(doc for),關於:when:while的示例可參見this recent answer of mine)。

+0

感謝Michal的快速​​反應。這工作完美:)乾杯 –

+1

無後顧之憂。只是爲了完整性而添加了關於「map」和過濾/綁定迷你語言的評論。 –

+0

很酷,謝謝:) –