thể trùng lặp:
Why don't Haskell list comprehensions cause an error when pattern match fails?mẫu không đầy đủ trong Haskell danh sách hiểu
Hôm nay tôi thấy đoạn mã sau:
Prelude> [a | Just a <- [Just 10, Nothing, Just 20]]
[10, 20]
Nó hoạt động. Nhưng tôi nghĩ rằng danh sách hiểu trên là đường chỉ là cú pháp cho ...
[Just 10, Nothing, Just 20] >>= (\(Just x) -> return x)
... mà Haskell, khi gặp phải những Nothing
, sẽ phát ra một lỗi *** Exception: Non-exhaustive patterns in lambda
.
Vì vậy, câu hỏi của tôi là: những gì hiện [a | Just a <- [Just 10, Nothing, Just 20]]
dịch thành (về mã monadic) mà làm cho nó bỏ qua các Nothing
?
@ephemient: Cảm ơn! Bài đăng bạn đã liên kết để trả lời câu hỏi của tôi. Và tôi đã tìm thấy [một] (http://stackoverflow.com/questions/7007222/haskell-list-comprehension-to-combinatory). Lý do tôi không tìm thấy những bài viết này trước khi tôi đăng câu hỏi của tôi là vì họ không chứa từ "đầy đủ", đó là thuật ngữ của Haskell cho vấn đề. (Tôi mới sử dụng StackOverflow và không chắc chắn mình nên làm gì. Tôi có nên xóa câu hỏi này không? Nó vẫn hữu ích cho những người gõ "[không] đầy đủ".) –
Bạn không cần phải xóa - cuối cùng nó sẽ được đóng lại như là một bản sao, có nghĩa là sẽ có một liên kết lớn lên đầu người chuyển tiếp từ đây đến tiếp theo với câu trả lời. Và, như bạn lưu ý, nó hữu ích hơn để giữ xung quanh hơn để giết :) – ephemient