Sau hơn một năm cãi nhau tinh thần, cuối cùng tôi đã hiểu Haskell đủ để coi đó là ngôn ngữ chính của tôi cho phần lớn các nhu cầu lập trình chung của tôi. Tôi hoàn toàn thích nó.Chức năng so sánh các tập hợp dữ liệu với nhau một lần với Haskell
Nhưng tôi vẫn đấu tranh với các hoạt động rất cụ thể theo cách chức năng.
Một ví dụ đơn giản:
Set = [("Bob", 10), ("Megan", 7), ("Frank", 2), ("Jane", 11)]
Tôi muốn so sánh các mục với nhau. Với một ngôn ngữ như C hoặc Python, tôi có thể tạo ra một số vòng lặp phức tạp, nhưng tôi không chắc chắn cách tiếp cận nào (bản đồ, gấp, danh sách hiểu?) Sẽ là tốt nhất hoặc hiệu quả nhất với ngôn ngữ chức năng.
Dưới đây là một mẫu mã tôi bắt đầu làm việc trên:
run xs = [ someAlgorithm (snd x) (snd y) | x <- xs, y <- xs, x /= y ]
Các vị giữ sự hiểu biết danh sách từ so sánh mục với chính mình, nhưng chức năng không phải là rất hiệu quả vì nó so sánh mục mà đã được so. Ví dụ. Nó sẽ so sánh Bob với Megan, và sau đó so sánh Megan với Bob.
Bất kỳ lời khuyên nào về cách giải quyết vấn đề này sẽ được đánh giá cao.
Bạn nói rằng bạn muốn so sánh chúng, nhưng không phải những gì bạn muốn làm với kết quả so sánh. Từ mẫu của bạn có vẻ như bạn muốn xem xét mọi lựa chọn của hai yếu tố khác nhau từ một danh sách. Là nó? –
Có, nhưng không phải là lựa chọn "đảo ngược". Tôi muốn so sánh Bob với Megan, Bob với Frank, Bob cùng với Jane, và sau đó là Megan cùng Frank, Megan cùng Jane, và sau đó Frank cùng Jane (tôi nghĩ rằng bao gồm tất cả các kết hợp). Điều này trông giống như một cái gì đó mà có thể được thực hiện với gấp, nhưng tôi không chắc chắn. –