我編寫了下面的代碼,它需要一堆點並使用光澤庫在屏幕上繪製它們。是更有效率的點免費代碼,還是僅僅比較簡單?
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
它工作正常,但是,有一個重複模式時對我說:函數調用鏈,每一個送入接下來的最後一個參數的結果。 所以我重構通過移除中間變量,反向排序與函數組合鏈接功能(「」)像這樣:
let pict = Pictures . (map Line) . (map $ map $ mkPt) . blocks $ pes
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
令人高興的是,這工作就好了。但是,我想知道如果我正在讀可讀性,或者如果我只是不習慣閱讀&書寫自由風格的代碼。另外,我如何推理此代碼?第二個版本更有效率,還是僅僅比較簡單?有什麼我可以做的風格,使其更清晰?
確實,生成的代碼對於免費版本應該是相同的。沒有任何優化,點免費代碼會稍微低效,因爲它有更多的函數調用(組合)。 – augustss
哇,這是美麗的,我不知道有關顛倒的組合運算符。謝謝! – nont
@augustss:感謝您的確認 - 我並不確定,但重新排列都非常簡單,並且儘可能地重新排列子表達式,似乎沒有任何差異。除非差別很大,否則我傾向於不擔心「不優化」情況。依靠嚴格性分析器將'foldl'變成'foldl''使我感到不舒服。 –