Namaran

Code daily. Without assist.

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と同様、依然としてクラッシュします)。