簡體   English   中英

函數式編程,Haskell將函數應用於變量列表

[英]Functional Programming, Haskell applying a function to a list of variables

我有一個類型為Csp -> Var -> Int -> Csp函數,並且我想將此函數應用於[Var]列表,只是想知道是否有人可以幫助我,我完全不知所措!

根據您的評論,聽起來像是要折疊,例如:

foo :: Csp -> Var -> Int -> Csp -- your function

bar :: Csp -> [Var] -> Int -> Csp
bar c0 vs x = foldl (\c v -> foo c v x) c0 vs

盡管可能需要稍微更改參數的順序以使其更適合部分應用程序:

foo :: Int -> Csp -> Var -> Csp

bar :: Int -> Csp -> [Var] -> Csp
bar x = foldl (foo x)

您想要的是折疊。 foldl具有簽名foldl :: (a -> b -> a) -> a -> [b] -> a ,因此在您的情況下,您希望aCsp h和bVar ,給您類型foldl :: (Csp -> Var -> Csp) -> Csp -> [Var] -> Csp 對於第一個參數,只需將其傳遞給\\csp var -> f csp var yourFixedInt ,其中f是您的函數。

如果您不熟悉fold s,那么將適用於此操作,對於Var列表中的每個var ,您都可以將其傳遞給函數(在這種情況下,您的函數必須使用Int參數固定)傳遞給Csp累加器和var

(關於褶皺有很多更好的解釋,但我認為我至少要附上簡短的評論)

http://zvon.org/other/haskell/Outputprelude/map_f.html

這可能是您要尋找的,不是嗎?

您想折一折,或者對我來說聽起來很對。 假設您擁有的功能是f

f :: Csp -> Var -> Int -> Csp
vars = [ ..... ] :: [Var]
i :: Int -- the constant int argument to f

foldl g vars where g c v = f c v i

我想你需要折。

answer :: (Csp -> Var -> Int -> Csp) -> Csp -> [Var] -> Int -> Csp
answer f csp vs i = foldl (\csp' v -> f csp' v i) csp vs

map接受一個函數並將其應用於值列表。 因此,舉一個簡單的例子,如果我有一個函數fx = x + 5 ,並且列表l = [1,2,3] ,則map fl將返回[6,7,8]

給定f :: Csp -> Var -> Int -> Cspl :: [Var] ,您應該寫

map (\x -> f csp x int) l -- note that the variable names (like "csp") can be anything

它將具有:: Csp -> Int -> Csp 換句話說,它將返回功能列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM