Câu hỏi Có gì mới trong cấu trúc dữ liệu chức năng thuần túy kể từ Okasaki? và câu trả lời sử thi của jbapple, được đề cập bằng cách sử dụng danh sách khác biệt trong lập trình chức năng (trái ngược với lập trình logic), đó là điều mà gần đây tôi đã quan tâm. Điều này dẫn tôi đến việc thực hiện danh sách khác biệt cho Haskell. Tôi có hai câu hỏi (tha thứ / sửa lỗi cho tôi nếu tôi nên đặt chúng thành hai câu hỏi khác nhau trên StackExchange).
Câu hỏi đơn giản là, có ai biết về việc xem xét học thuật các danh sách khác biệt trong lập trình chức năng và / hoặc triển khai bên cạnh một trong thư viện Haskell không? Câu trả lời của jbapple đã không đưa ra một trích dẫn cho các danh sách khác biệt (danh sách khác biệt trong lập trình logic tồn tại trong truyền thuyết và trong một vài nguồn mà tôi có quanh đây ở đâu đó (TM)). Trước khi tìm thấy triển khai Haskell, tôi không biết rằng ý tưởng đã chuyển từ logic sang lập trình chức năng. Cấp, các danh sách khác biệt Haskell là một cái gì đó sử dụng tự nhiên các hàm bậc cao hơn và hoạt động hoàn toàn khác với các hàm trong lập trình logic, nhưng giao diện chắc chắn tương tự nhau.
Điều thú vị hơn (và xa đầu hơn) mà tôi muốn hỏi là liệu giới hạn trên không có triệu chứng được tuyên bố đối với thư viện danh sách khác biệt Haskell đã nói ở trên có vẻ đúng / hợp lý hay không. Sự nhầm lẫn của tôi có thể là do tôi thiếu một cái gì đó rõ ràng về lý do phức tạp với sự lười biếng, nhưng các giới hạn được tuyên bố chỉ có ý nghĩa với tôi nếu việc thay thế một cấu trúc dữ liệu lớn (hoặc hình thành đóng cửa, hoặc tra cứu biến đổi, hoặc một cái gì đó ) luôn luôn mất thời gian. Hay là "bắt" chỉ đơn giản là không bị ràng buộc về thời gian chạy cho "đầu" và "đuôi" chính xác bởi vì các hoạt động đó có thể phải cày xới qua một đống tính toán / thay thế bị trì hoãn?