Tôi đang đọc qua số Gentle Introduction và tự hỏi tại sao trong danh sách hiểu với hai trình tạo, trình tạo đúng bên phải được lặp lại "nhanh nhất" (tức là biên dịch đến vòng lặp trong cùng, tôi đoán). Quan sát đầu ra GHCi sau:Tại sao tính năng hiểu danh sách Haskell với nhiều máy phát điện xử lý máy phát điện ngoài cùng bên phải là vòng lặp chặt chẽ nhất?
*Main> concat [[(x,y) | x <- [0..2]] | y <- [0..2]]
[(0,0),(1,0),(2,0),(0,1),(1,1),(2,1),(0,2),(1,2),(2,2)]
*Main> [(x,y) | x <- [0..2], y <- [0..2]]
[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
Nếu máy phát điện tận cùng bên trái được lặp nhanh nhất, hai biểu thức trên sẽ có giá trị như nhau, mà tôi nghĩ rằng làm cho việc lựa chọn Công ước này tự nhiên hơn bằng cách nào đó.
Vì vậy, có ai biết tại sao quy ước ngược lại đã được chọn không? Tôi nhận thấy Python có cùng quy ước như Haskell (thậm chí có thể mượn nó từ Haskell?), Và trong thế giới Python the word có vẻ là thứ tự đã được chọn "bởi vì đó là thứ tự bạn muốn viết vòng lặp", nhưng tôi thu thập suy nghĩ đó về vòng lặp không phải là chính xác những gì hầu hết các lập trình viên Haskell làm ...
Suy nghĩ?
Từ nhận xét của tôi về câu trả lời Louis Wasserman của dưới đây:
Tôi đoán đây thứ tự tương ứng với một sự giải thích bắt buộc giữa các đồng chí hiểu được coi là tự nhiên hơn có nó tương ứng với làm tổ trong danh sách. Vì vậy, trong bản chất giải thích Haskell cho điều này là giống như lời giải thích Python tôi liên kết trong câu hỏi, sau khi tất cả, có vẻ như.
Làm thế nào điều này sẽ * tự nhiên hơn *? Bạn cũng muốn 11, 21, 31, 41 thay vì 11, 12, 13, 14? – Ingo
Tôi đoán sử dụng '(y, x)' làm biểu thức nguyên mẫu - hoặc đặt trình tạo y ở bên trái của trình tạo x - sẽ có ý nghĩa hơn nếu máy phát bên trái nhất là vòng lặp chặt chẽ nhất. Sau đó, nó sẽ là dòng thứ hai trong sản lượng GHCi của tôi trông lạ với bạn (11, 21, 31, 41), chứ không phải là cái đầu tiên, nhưng chúng vẫn khác nhau, đó là quan điểm của tôi. – kini
Xin lỗi, tôi đoán tôi nên giải quyết bạn khi trả lời bạn, @Ingo. (Loại mới để Stack tràn.) – kini