リスト実装を使用してHaskell map
関数の実装を記述する方法はありますか?リスト実装を使用した関数haskell
私はエラーが発生していると私は正しい軌道にいるとは思わない。これは私が持っているものです:
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' xs ys = [ (x, y) | x <- xs | y <- ys ]
正しい方向に私を導く助けやリンクがあれば幸いです。
リスト実装を使用してHaskell map
関数の実装を記述する方法はありますか?リスト実装を使用した関数haskell
私はエラーが発生していると私は正しい軌道にいるとは思わない。これは私が持っているものです:
map' :: (a -> b) -> [a] -> [b]
map' _ [] = []
map' xs ys = [ (x, y) | x <- xs | y <- ys ]
正しい方向に私を導く助けやリンクがあれば幸いです。
「実装」の代わりに「理解」を意味すると思います。
いずれにせよ、この動作します:
map' f as = [f a | a <- as]
map' (* 2) [1..5]
注
map' f xs = [f x | x <- xs]
desugarsその
map' f xs = xs >>= return . f
012にdesugars
map' f xs = do x <- xs
return $ f x
へ(すべてのモナドもファンクタであることが証明されています)Monad
インスタンスからFunctor
インスタンスを定義するためのよく知られている定義(map'
をfmap
に置き換えた場合)です
です。
具体的には、リストの理解は単なるモナド演算子でmap
の定義の偽装バージョンであることを示しています。
型シグネチャは 'map'と言っていますが、実装では' zip'と表示されます(冗長なケースがあります)。 – pat
'map'の最初の引数は、(型シグニチャのような)関数です。 'map'は関数をリストの各要素に適用し、結果のリストを返します)。 2つのリストの要素からペアを作成しています。これは 'zip'です – pat