2026-08-24
LastElement.hs
lastElement :: [a] -> a
lastElement xs = xs !! length xs
これはすべての空でないリストに対して、実行時にクラッシュします。何が問題で、どう直せばよいでしょうか?
Answer
!!は0始まりのインデックスなので、最後の要素はlength xsではなくlength xs - 1の位置にあります。lastElement xs = xs !! (length xs - 1)とすれば直ります(空のリストに対しては、組み込みのlastと同様、依然としてクラッシュします)。