मैंने निम्नलिखित कोड लिखा, जो अंक का एक गुच्छा लेता है और चमक पुस्तकालय का उपयोग करके उन्हें स्क्रीन पर खींचता है।बिंदु मुफ्त कोड अधिक कुशल है, या सिर्फ 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
यह ठीक काम करता है, लेकिन यह एक दोहराया पैटर्न है कि मेरे पास होता है: फ़ंक्शन कॉल की एक श्रृंखला है, अगले के अंतिम बहस में खिला हर एक का परिणाम है। तो मैं, मध्यवर्ती चर को हटाने के आदेश को पलटने और ("।") समारोह संरचना के साथ काम करता है चेनिंग तो तरह से पुनर्संशोधित:
let pict = Pictures . (map Line) . (map $ map $ mkPt) . blocks $ pes
in do displayInWindow "My Window" (200, 200) (10, 10) white pict
सौभाग्य से, यह भी ठीक काम करता है। लेकिन मुझे आश्चर्य है कि क्या मैं पठनीयता को दबा रहा हूं, या अगर मुझे & लेखन बिंदु मुक्त शैली कोड पढ़ने के लिए उपयोग नहीं किया जाता है। इसके अलावा, मैं इस कोड के बारे में कैसे तर्क करूं? क्या दूसरा संस्करण अधिक कुशल है, या बस terser? क्या यह कुछ भी है जो मैं इसे स्पष्ट बनाने के लिए स्टाइलिस्टिक रूप से कर सकता हूं?
दरअसल, उत्पन्न कोड बिंदु मुक्त संस्करण के लिए समान होना चाहिए। किसी भी अनुकूलन के बिना बिंदु मुक्त कोड थोड़ा कम कुशल होगा, क्योंकि इसमें अधिक फ़ंक्शन कॉल (संरचना का) है। – augustss
वाह, यह सुंदर है मुझे उलटा रचना ऑपरेटर के बारे में पता नहीं था। धन्यवाद! – nont
@augustss: पुष्टिकरण के लिए धन्यवाद - मैं निश्चित नहीं था, लेकिन पुनर्गठन सभी बहुत ही तुच्छ हैं और उप-अभिव्यक्तियों के संभावित पुनर्मूल्यांकन के रूप में कोई अंतर नहीं दिखता है। मैं "अनुकूलन" परिदृश्य के बारे में चिंता न करें जब तक कि अंतर गंभीर न हो, उदा। 'foldl' को 'foldl' में बदलने के लिए सख्तता विश्लेषक पर भरोसा करना मुझे असहज बनाता है। –