2012-02-22 35 views
1

私はCsp -> Var -> Int -> Csp型の関数を持っています。この関数を[Var]のリストに適用したいと思います。誰かが私を助けてくれるのだろうかと思っています。関数型プログラミング、Haskell関数を変数リストに適用する

+4

が固定されることになってint型/ CSPの引数で、[ - > int型 - > CSP CSP]あなたは上で反復するCSP引数を使用したいですか、あなたは結果の型のリストになりたいですか? –

+1

説明のために:varのリストの他に、cspとintもあり、cspのリストが必要ですか?これは正しいですか? – Boris

+1

ここに行くことはあまりありません。もっと具体的にして、試したこと、期待している結果などを示すコードを追加できますか? – hammar

答えて

7

であるあなたは倍にしたいように、それは例えば、聞こえると仮定します部分適用にもっと適したものにする:

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

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

鮮やかなあなたの助けを借りてありがとう:) – user1226239

1

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

これはありません、あなたが探しているものかもしれませんか?

+0

マップを使用しようとしましたが、このエラーが予想されるタイプ[CSP]と推定タイプCSPと一致できませんでした。 – user1226239

+0

OPが値を2番目の引数3つの引数を持つ関数のうちの1つです。これはもっと説明が必要です。 – amindfv

0

mapは、関数をとり値のリストに適用します。 私は機能f x = x + 5、およびリストl = [1,2,3]を持っている場合、その後、map f lf :: Csp -> Var -> Int -> Csp考える[6,7,8]

、およびl :: [Var]を返しますので、簡単な例として、あなたがタイプ:: Csp -> Int -> Cspを持つことになります

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

を書く必要があります。つまり、関数のリストを返します。

2

折りたたみは何ですか? foldlにはfoldl :: (a -> b -> a) -> a -> [b] -> aという署名が付いていますので、aCsphとなり、bVarとなり、タイプはfoldl :: (Csp -> Var -> Csp) -> Csp -> [Var] -> Cspになります。最初の引数については、\csp var -> f csp var yourFixedIntのようなものを渡します。fはあなたの関数です。

あなたはfoldに慣れていない場合、これは何だがCspに、Var秒のあなたのリスト内の各varのために、あなたはそれを渡す機能(固定Int引数で、この場合はちょうどあなたの関数)を適用していますアキュムレータおよびvar

は(周りのひだの多くの方の説明がありますが、私は、少なくとも短いコメントを含めると思います考え出し)あなたは倍にしたい、またはそれは私に聞こえる

1

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 

それは価値が少し引数の順序を変更するかもしれないが: は、あなたが持っている機能は、あなたのコメントから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 
1

私はあなたが折り畳みが必要と思う。

answer :: (Csp -> Var -> Int -> Csp) -> Csp -> [Var] -> Int -> Csp 
answer f csp vs i = foldl (\csp' v -> f csp' v i) csp vs 
関連する問題