2026-09-20
DoubleEvens.hs
doubleEvens :: [Int] -> [Int]
-- write this: double every even element, leave odd elements as they are;
-- use map and a lambda, not a separately named helper function
doubleEvensを実装してください。リストの中の偶数の要素だけを2倍にし、奇数の要素はそのままにすること。mapと無名関数(ラムダ式)を使い、別名の補助関数は定義しないこと。
Reference
doubleEvens :: [Int] -> [Int]
doubleEvens = map (\x -> if even x then x * 2 else x)
「偶数なら2倍、奇数ならそのまま」という判断そのものはdoubleEvensという名前の外では二度と使わない、その場限りの処理です。こういう使い捨ての処理にいちいちwhereやletで名前を付けるより、mapに直接無名関数\x -> if even x then x * 2 else xを渡すほうが、処理の内容がその場で読み取れます。またdoubleEvensの定義には引数xsが出てきません。map fはそれ自体が「リストを受け取ってリストを返す関数」なので、doubleEvens xs = map (...) xsと書かずにdoubleEvens = map (...)とだけ書けます(ポイントフリースタイル)。これも高階関数(map)が関数そのものを返せることの一例です。これは参考実装であり、唯一の正解ではありません。