Tôi sẽ xem qua hướng dẫn learn you a haskell và Tôi đã xem xét một số ví dụ mà tác giả đã đưa ra.Kết hợp mẫu Haskell: Khả năng đọc và hiệu suất
Ví dụ ông reimplemented zip như sau:
zip' :: [a] -> [b] -> [(a,b)]
zip' _ [] = []
zip' [] _ = []
zip' (x:xs) (y:ys) = (x,y):zip' xs ys
Ông sử dụng một cách tiếp cận tương tự cho tất cả các ví dụ khác của mình, nơi ông đặt các mô hình cụ thể nhất đầu tiên. Đây là phiên bản hơi khác nhau một chút:
zip' :: [a] -> [b] -> [(a,b)]
zip' (x:xs) (y:ys) = (x, y):zip' xs ys
zip' _ _ = []
Theo tôi hiểu cả hai phương pháp cũng làm như vậy. Nếu một danh sách trống được cung cấp theo cách (x: xs) hoặc (y: ys) sẽ không khớp với danh sách sẽ kết thúc đệ quy bằng cách thêm danh sách trống [].
- Cá nhân tôi thích phiên bản thứ hai để dễ đọc hơn, nhưng có thể tôi đã sai khi làm như vậy.
- Có ảnh hưởng gì đến hiệu suất của phương pháp không? Theo như tôi hiểu nếu mẫu trên cùng không phù hợp, Haskell sẽ kiểm tra mô hình tiếp theo. Thứ tự của các mẫu có ảnh hưởng đến hiệu suất không? liên quan
Kind,
Edit:
Có thể lặp lại của: Haskell GHC: what is the time complexity of a pattern match with N constructors?
Tóm tắt: Thứ tự của các mẫu là rất quan trọng đối với ngữ nghĩa (về thẩm định nghiêm ngặt của các đối số) và khả năng đọc của một hàm. Bản thân đối sánh mẫu sẽ luôn ở trong trạng thái phức tạp thời gian O (1).
Bản sao có thể có của [Haskell GHC: độ phức tạp thời gian của mẫu khớp với N constructors là gì?] (Http://stackoverflow.com/questions/9027384/haskell-ghc-what-is-the-time-complexity -of-a-pattern-match-with-n-constructors) – Nimi