2011-03-04 68 views
6

如果我需要提供一個恆定值到我映射到一個序列的項的功能,有沒有比我現在在做什麼更好的辦法:映射在序列具有恆定

(map my-function my-sequence (cycle [my-constant-value])) 

其中my-constant-value是一個常數,它對於my-sequence上的映射將是相同的,儘管它本身可能是一些函數的進一步結果。我感覺到後來我會看看我在這裏問的是什麼,並認爲這是一個愚蠢的問題,因爲如果我以不同的方式組織代碼,這不會是一個問題,但它確實存在!

回答

7

在你的情況我會使用匿名函數:

(map #(my-function % my-constant-value) my-sequence) 

使用部分應用功能是另一種選擇,但它並沒有多大意義,在此特定情形:

(map (partial my-function my-constant-value) my-sequence) 

你可能會(也許?)需要重新定義我的函數以將常量值作爲第一個參數,並且您不需要接受可變數量的參數,因此使用partial不會爲您購買任何東西。

1

是的:)從API constantly

"other useful functions"部小寶石(我的映射功能我的序列(我的不斷恆定值))

(圖的圖案compines-data something-new a-constant)在idomatic clojure中很常見。它與分塊的序列等也相對較快。

編輯:這個答案是錯誤的,但constantly和其他「其他有用的功能」api是如此酷,我想在這裏給他們的參考無論如何。

+1

不斷返回的功能,而不是一個序列:'clojure.core /重複 ([ x] [n x]) 返回一個懶惰(如果提供了無限!或者長度爲n)的序列x.' – skuro 2011-03-04 08:03:52

+0

好點,重複對這個工作更好 – 2011-03-04 18:30:56

9

我傾向於使用部分或匿名函數作爲dbyrne建議,但另一個工具要注意的是repeat,它返回你想要的任何值的無限序列:

(map + (range 4) (repeat 10)) 
=> (10 11 12 13) 
4

另一種方式我發現有時比map更具可讀性是for列表理解宏:

(for [x my-sequence] 
    (my-function x my-constant-value))