Итак, как вы сами объяснили, если в списке два элемента, первый случай совпадает.
В противном случае, если есть один или несколько, это второй случай?
Что осталось? Последний случай соответствует пустым спискам. Если нет первого элемента, который нужно отрубить, он пройдет через второй случай и попадет в последний. Вы можете оставить ???
там или выбросить другое исключение, если хотите. Или просто сделай l.head
(он тебя бросит).
Я полагаю, вы просто пишете эту функцию для упражнения, но просто подумали, что я все равно упомяну об этом: то, что вы делаете, эквивалентно l.init.last