Tôi đang làm việc theo cách của mình qua cuốn sách The Haskell Road to Logic, Maths and Programming. (Tôi chỉ là giữa chừng thông qua chương 1, nhưng tôi thích nó cho đến nay và có ý định tiếp tục.) Tôi đã đọc qua phần 1.5 "Chơi trò chơi Haskell" trong đó "bao gồm một số ví dụ khác để làm quen với [Haskell] ". Cho đến nay tôi đã học về các hàm, khai báo kiểu, phương trình được bảo vệ, một chút về kết hợp mẫu danh sách và trong đó & cho phép.Tại sao tôi nhận được "Các mẫu không đầy đủ chức năng ..." khi tôi gọi hàm chuỗi con Haskell của mình?
Tôi đang mắc kẹt trên tập 1,17, trong đó đòi hỏi chúng ta phải viết một hàm substring :: String -> String -> Bool nơi:
- nếu xs là tiền tố của ys, xs là một chuỗi con của ys
- nếu ys bằng y: ys' và xs là một chuỗi con của ys', xs là một chuỗi con của ys
- không có gì khác là một chuỗi con của ys
tôi đã sử dụng chức năng tiền tố cung cấp trong một ví dụ trước:
prefix :: String -> String -> Bool
prefix [] ys = True
prefix (x:xs) [] = False
prefix (x:xs) (y:ys) = (x==y) && prefix xs ys
Và sau đó thử:
substring :: String -> String -> Bool
subsstring xs [] = False
substring xs (y:ys) | prefix xs (y:ys) = True
| substring xs ys = True
| otherwise = False
... và có thể hoán vị khác về điều này.
Khi tôi chạy substring "abc" "xxxabcyyy"
tôi nhận được True
, nhưng khi tôi chạy substring "abc" "xxxabyyy"
tôi nhận được "* Ngoại lệ: substring.hs: (3.0) - (5,45): mô hình không đầy đủ chức năng chuỗi con". Tôi không thể hiểu tại sao. Tôi không hiểu làm thế nào có thể có các mẫu không đầy đủ khi tôi sử dụng "nếu không".
BTW, sách chưa được bao trả nếu-thì-người khác. Tôi muốn giữ cho nó ra khỏi giải pháp của tôi, cho bây giờ.
Tôi không thể quyết định có nên xấu hổ vì tôi lãng phí thời gian của bạn với lỗi đánh máy hay vui lòng giải pháp của tôi đã hoạt động ngoại trừ lỗi đánh máy. Cảm ơn. –
Điều này thật thú vị. Bạn có thể có một trong những loại hệ thống phức tạp nhất xung quanh, một lỗi đánh máy đơn giản không thể bị bắt bởi nó. – gawi
đó là những cảnh báo. – muhmuhten