Я пытаюсь создать функцию, которая возвращает последний элемент списка. Однако здесь что-то странно.Разница между запятой и | in erlang
last([X,[]]) -> X;
last([_X|Xs]) -> last(Xs).
Это возвращает ошибку предложения без согласования. Но если я сменил первую строку на last([X|[]]) -> X;
, она будет работать правильно. Я думаю, что обе линии означают одно и то же, но они явно имеют разные результаты. Я пропустил что-то важное здесь?
Спасибо за совет. Я делаю это, потому что думаю, что писать собственные функции я бы лучше тренировал свои навыки. Кроме того, могу ли я спросить, что о 'last ([X]) -> X'? Работает ли он так же, как 'last [X | []]'? – maoyi
Да. Вы можете проверить это, если вы войдете в оболочку Erlang и введите следующее: '[1] = [1 | []].' (Здесь я решил использовать значение '1', но вы можете использовать любое значение, если оно то же самое с обеих сторон '='). Это похоже на утверждение, в котором указано, что '[1]' является совпадением для '[1 | []]'. Результат показывает, что это правда; если бы они не совпадали, вместо этого мы получили бы исключение «badmatch». –
@ user2129773 Что касается '[1] = [1 | []]', вы можете найти некоторую справочную информацию о идее «списков минусов». Оборудовавшись некоторыми базовыми знаниями, вы начнете распознавать эти структуры по всему месту, одетым в различные синтаксисы на разных языках: https://mitpress.mit.edu/sicp/full-text/book/book-Z-H-14.html – zxq9