Функция работает правильно при N> = 0. Без охраны, при N <0 он прошел бы весь список: </p>
index (-2, [1,2,3]) -> index (-3, [2,3]) -> ... -> index (-5, []) -> error.
Это не большая проблема, только вы можете получить запутанное исключение. В языках с бесконечными списками (Haskell, Ocaml), забывание об этом предохранителе может привести к бесконечному циклу: index (-1, [0,0,0 ..]).