練習問題 2.
lastButOneという関数を書きなさい。この関数は最後の1つ前の要素を返す関数です。
解
再帰にすこしずつ慣れていく。
lastButOne :: [a] -> a lastButOne xs = if length xs == 2 then head xs else lastButOne (tail xs)
練習問題 3.
lastButOne関数をghciにロードして、いろいろな長さのリストについて試してみなさい。短すぎるリストを渡すとどうなりますか。
解
Prelude> :load lastButOne.hs [1 of 1] Compiling Main ( lastButOne.hs, interpreted ) Ok, modules loaded: Main. *Main> lastButOne [1,2,3] 2 *Main> lastButOne "Hello World" 'l' *Main> lastButOne "a" *** Exception: Prelude.tail: empty list
短すぎるリストを渡すとtailが例外を吐く。
練習問題 1.
みたいな抽象的な質問ってむずかしい。[a] -> aでない振る舞いを挙げればいいのか?