lastButOne(Real World Haskell 2章)

練習問題 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でない振る舞いを挙げればいいのか?