Попробуйте этот код:
last1 (x:xs:l) = (x,xs,l)
l
не дает вам последний элемент в списке, он получает вас от остальной части списка, кроме первых двух переменных, которым назначены первые два элемента в списке.
Когда вы пишете совпадение с шаблоном для списка, первой переменной назначается первый элемент и так далее, пока программа не доберется до последней переменной, где ей будет присвоено все оставшееся. Нет ничего особенного в добавлении s
после x
, переменная с именем y
будет делать то же самое.
Если вы хотите получить последний элемент списка, вам нужно создать шаблон, подобный (x:xs)
, и использовать рекурсию на xs
и применять этот шаблон, пока вы не перейдете к одному элементу списка, который является последний элемент. Тем не менее, я бы порекомендовал прочитать ответ Адама Бергмарка , чтобы лучше перевернуть список, не включая поиск первого и последнего элементов списка.