2016-04-10 9 views
0

たとえば、テーブルtab = [(1,11), (2,22), (3,33)]と2つの機能があります。最初のものは、テーブルとIntegerをパラメータとして取り、Integerをテーブルの値で置き換えます。 Integerがテーブル上にあると仮定しましょう。Haskellで明示的なパラメータなしで関数を書くことは可能ですか?

replace :: [(Int, Int)] -> Int -> Int 
replace t i = snd $ head [x | x <- t, fst x == i] 

第二の機能は、テーブルの値で、リストから1, 2, 3の出現をすべて置き換えます。

replaceAll :: [(Int, Int)] -> [Int] -> [Int] 

まず私が得た:

replaceAll = \tab lst -> foldl(\acc x -> acC++ [replace tab x]) [] lst 

その後、

replaceAll = \tab -> foldl(\acc x -> acC++ [replace tab x]) [] 

は、ラムダ関数せずにこれを書くための方法はありますか? 編集:折り畳み機能を使用する必要はありません。

+4

あなたは本当にそのコードのポイントフリーバージョン(http://pointfree.io/): 'replaceAll = flip foldl([])を望んでいません。フリップ((。)。(++))。フリップフリップ([])。 ((::))。置き換える – Zeta

答えて

2

あなたは彼らにこの定義のためのparamsを埋める場合、私はまたのparamsを取り除くように、私はこれが理解し少し簡単だと思うが、これは私のため

replaceAll = map . replace 

に動作します....

replaceAll index vals = map (replace index) vals 
関連する問題