4

これは昨日締め切りの宿題ですが、正しい方向へのポイントだけを答えてほしくありません;)

haskellでラムダをunzip使用して関数を実装しようとしています。map

:t unzip
[(a,b)] -> ([a],[b]) 

したがって、ラムダは次のように\(a,b)->([a],[b])なり、そのような作品は、私の入力から得ていることを除いて[(4,5),(7,5),(9,7)] => [([4],[5]),([7],[5]),([9],[7])][4,7,9],[5,5,7]. それで、私はここで何が間違っていますか?

私を正しい方向に向けてくれてありがとう

4

2 に答える 2

7

map :: (a -> b) -> ([a] -> [b])リストを返しますよね?そして、関数が 2 つのリストを返すようにしたいので、map2 回使用する必要があります。記入するスケルトンは次のとおりです。

unzip xs = (map {- ??? -} xs, map {- ??? -} xs)

残念ながら、mapリストを 2 回パスしなければならないことを意味するため、使用を主張するのは非効率的です。もう少し上手にできますが、難しいです。試してみて、 GHC の実装と比較して、どれだけうまくできたかを確認してください。

于 2012-06-04T03:28:36.383 に答える
4

unzip単一のマップでは実装できません

\(a,b)->([a],[b]) :: (a,b) -> ([a],[b])

それで

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

代わりに2つのマップが必要です

unzip ls = (map ???,map ???)

空欄を埋める

于 2012-06-04T03:30:43.357 に答える