Tôi muốn tạo một phương pháp để tôi có thể cung cấp cho nó một danh sách độ dài và nó sẽ trả về tất cả các kết hợp của tọa độ Descartes cho đến độ dài đó. Giải thích dễ dàng hơn với ví dụ:Sản phẩm được lồng ghép của danh sách Haskell
cart [2,5]
Prelude> [ [0,0],[0,1],[0,2],[0,3],[0,4],[1,0],[1,1],[1,2],[1,3],[1,4] ]
cart [2,2,2]
Prelude> [ [0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1] ]
Việc hiểu danh sách đơn giản sẽ không hiệu quả vì tôi không biết danh sách sẽ dài bao lâu. Trong khi tôi yêu sự đơn giản của Haskell đối với nhiều vấn đề, đây là một trong những điều mà tôi có thể viết procedurally (trong C hoặc một cái gì đó) trong 5 phút trong khi Haskell cho tôi một chứng phình động mạch!
Một giải pháp cho vấn đề cụ thể này sẽ giúp tôi rất nhiều; Tôi cũng thích nghe về quá trình suy nghĩ của bạn khi giải quyết những thứ như thế này.
Wow, cảm ơn Kenny và Dave. Tôi chưa bao giờ nghĩ đến việc ném một cuộc gọi đệ quy vào định nghĩa hiểu danh sách - rất hay. Phiên bản sử dụng bản đồ và gấp là rất tốt. Tôi cố gắng sử dụng các hàm bậc cao hơn khi tôi có thể nghĩ ra một cách, vì vậy đây là một ví dụ tuyệt vời để nghiên cứu! – cspyr0
miễn là bạn đang sử dụng các hàm bậc cao hơn, biết rằng nó không nên khó hiểu. và sử dụng các chức năng đúng sẽ giúp đạt được điều đó, 'chuỗi' là những gì bạn cần ở đây. – yairchu
Cảm ơn bạn yairchu cho cả giải pháp ngắn gọn và rõ ràng và giới thiệu tôi với hoogle. Làm thế nào tôi có thể làm bất cứ điều gì mà không có điều này ?! – cspyr0