7

私が理解している限り、Haskell の map は関数とリストを受け取り、その関数をそのリスト内のすべての要素に適用してから、各メンバーに関数が適用された新しいリストを作成します。

試してみると、これは次のような非常に単純な関数でうまく機能する(+5)ので、次のように入力するとうまく機能します。

map (+7) [2,8,9,3]

私は得る:

[9,15,16,10]

ただし、これは私が作成した関数では機能しません。shiftLetter型宣言が次の関数を作成したとします。

shiftLetter :: Char -> Int -> Char

(Int を使用して、返された文字がどれだけ離れているかをシフトします)

複数の文字とタイプでそれを行う新しい関数を作成した場合:

shiftLetters :: String -> Int -> Char
shiftLetters letters shift = map shiftLetters "AKHLKHN"

エラーが発生するのはなぜですか?

4

2 に答える 2

12

関数の型を確認すると、次のように表示されmapます。

map :: (a -> b) -> [a] -> [b]

したがって、1 つのパラメーターを受け取る関数が必要ですが、あなたの関数は 2 つのパラメーターを受け取ります。使用する必要があります

shiftLetters letters shift = map (flip shiftLetter $ shift) letters

また

shiftLetters letters shift = map (`shiftLetter` shift) letters

無意味なスタイル:

shiftLetters = flip $ map . flip shiftLetter
于 2013-10-12T22:07:35.313 に答える