Tôi vừa mới bắt đầu tìm hiểu Haskell và tôi đang cố gắng sử dụng mẫu phù hợp để khớp với danh sách có chính xác 2 phần tử. Như một bài tập, tôi đang cố gắng viết một hàm trả về một hàm nhưng phần tử cuối cùng từ một danh sách. Cho đến nay tôi thấy điều này:Danh sách đối sánh mẫu với chính xác 2 phần tử trong Haskell
myButLast :: [a] -> a
myButLast [] = error "Cannot take one but last from empty list!"
myButLast [x] = error "Cannot take one but last from list with only one element!"
myButLast [x:y] = x
myButLast (x:xs) = myButLast xs
Bây giờ phù hợp với myButLast [x: y] rõ ràng là không chính xác, nhưng tôi không biết làm thế nào để phù hợp với một danh sách đó có chính xác 2 yếu tố, như đó là những gì tôi m cố gắng làm ở đó. Tôi đọc (http://learnyouahaskell.com/syntax-in-functions#pattern-matching) trang này và nó đã giúp tôi rất nhiều, nhưng tôi không hoàn toàn có được nêu ra ...
Bạn có thể viết '[x, y]' hoặc 'x: y: []'. Cả hai đều tương đương nhau. Mẫu '[x: y]' có nghĩa là "khớp với một danh sách chứa chính xác một phần tử, chính nó là một danh sách, chứa chính xác hai phần tử có tên là' x' và 'y'", không phải là ý của bạn. – MathematicalOrchid
@MathematicalOrchid Oh, tôi hiểu rồi. Cảm ơn nhiều! –
Trên thực tế, không, điều đó sai ... '[x: y]' có nghĩa là 'x' là phần tử đầu tiên và' y' là danh sách con còn lại. (Hãy suy nghĩ '[x: xs]'.) Xin lỗi về điều đó ... Dù bằng cách nào, nó không phải là ý của bạn. – MathematicalOrchid