Tôi đã viết đoạn mã sau, lấy một số điểm và vẽ chúng trên màn hình bằng cách sử dụng thư viện gloss.là mã điểm miễn phí hiệu quả hơn hay chỉ là terser?
let s = blocks pes
pts = map (map mkPt) s {- stitches to points-}
lines = map Line pts {-points to lines -}
pict = Pictures lines {- lines to a picture -}
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
Nó hoạt động tốt, nhưng nó xảy ra với tôi rằng có một mô hình lặp đi lặp lại: một chuỗi các cuộc gọi hàm, kết quả của mỗi lần đưa vào đối số cuối cùng tiếp theo. Vì vậy, tôi refactored bằng cách loại bỏ các biến trung gian, đảo ngược thứ tự và chaining các chức năng với hàm hợp ("") như sau:
let pict = Pictures . (map Line) . (map $ map $ mkPt) . blocks $ pes
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
Happily, điều này chỉ hoạt động tốt quá. Nhưng tôi tự hỏi nếu tôi đang căng thẳng khả năng đọc, hoặc nếu tôi chỉ không được sử dụng để đọc & viết mã phong cách miễn phí điểm. Ngoài ra, làm cách nào để tôi giải thích về mã này? Là phiên bản thứ hai hiệu quả hơn, hoặc chỉ terser? Có điều gì tôi có thể làm theo phong cách để làm cho nó rõ ràng hơn không?
Thật vậy, mã được tạo phải giống nhau đối với phiên bản miễn phí điểm. Không có bất kỳ tối ưu hóa nào, mã miễn phí điểm sẽ kém hiệu quả hơn, bởi vì nó có nhiều cuộc gọi chức năng hơn (thành phần). – augustss
Chà, thật tuyệt, tôi không biết về toán tử thành phần được đảo ngược. Cảm ơn! – nont
@augustss: Cảm ơn bạn đã xác nhận - Tôi không chắc chắn, nhưng các sắp xếp lại là tất cả khá tầm thường và dường như không có bất kỳ sự khác biệt nào về khả năng tái diễn của các biểu thức con. Tôi có xu hướng không lo lắng về trường hợp "không tối ưu hóa" trừ khi sự khác biệt là nghiêm trọng, ví dụ: dựa vào máy phân tích nghiêm ngặt để biến 'foldl' thành' foldl'' khiến tôi khó chịu. –