2014-03-28 105 views
2

填寫沒有答案關鍵字的學習指南。我需要的功能(FS)的列表應用的每個功能至(v)使用地圖的值在一行如何在函數列表中將函數列表中的每個函數應用到Haskell中的一行中的值

applyEach :: [a->b] -> a -> [b] 
applyEach fs v = map (\v -> fs v) fs 

這是據我可以得到的。據我所知,因爲FS是在功能列表中我不能申請FS的值,但我不知道如何使用每個功能列表

+1

你的意思是,'[a-> b] - > a - > [b]'? (不是一個'b',而是它們的一個列表?) –

+0

你想象'map($ v)fs'那樣'applyEach fs v = map(\ f - > f v)fs',正如其他人所說的那樣。 –

+0

[在Haskell中應用函數列表]的可能的重複(http://stackoverflow.com/questions/28400825/applying-a-list-of-functions-in-haskell) –

回答

9

您可以使用該$f $ x = f x):

Prelude> let fs = [(+1), (+2)] 
Prelude> map (\f -> f 2) fs 
[3,4] 
Prelude> map ($ 2) fs 
[3,4] 

這工作,因爲($ x)相當於一個section\f -> f $ x這相當於\f -> f x(地圖中的功能)

或者,你可以導入Control.Applicative和使用<*>和列表Applicative實例:

Prelude Control.Applicative> let fs = [(+1), (+2)] 
Prelude Control.Applicative> map (\f -> f 2) fs 
[3,4] 
Prelude Control.Applicative> fs <*> [2] 
[3,4] 
+0

這實際上是一個填充在 - 空白問題:applyEach :: [a-> b] - > a - > [b] applyEach fs v = map(__________)編輯:沒關係,我明白你在說什麼。 – Mdomin45

3

($ v)是,給定一個功能f的函數,計算f v。所以,只是映射過fs

map ($ v) fs 
相關問題