मैं समझता हूँ कि:लघु सर्किटिंग तरह
head (map (2**) [1..999999])
केवल वास्तव में मूल्यांकन करेंगे 2 ** 1, और बाकी में से कोई भी, लेकिन पुस्तक मैं पढ़ रहा हूँ कहना है कि:
head (sort somelist)
केवल विल सूची में सबसे छोटी वस्तु को खोजने की आवश्यकता है, क्योंकि यह सब कुछ उपयोग किया जाता है। यह कैसे काम करता है? जहां तक मैं कह सकता हूं, सॉर्टिंग एल्गोरिदम के साथ यह असंभव होगा (जैसे बबल सॉर्टिंग)।
एकमात्र तरीका मैं सोच सकता हूं कि यह काम करेगा यदि सॉर्टिंग एल्गोरिदम पूरी सूची के माध्यम से छोटी सूची की तलाश में है, और उसके बाद उस आइटम के बिना सूची पर पुन: कार्य करें। मेरे लिए, यह वास्तव में धीमा लगता है।
क्या यह सॉर्ट फ़ंक्शन कैसे काम करता है, या क्या कोई और सॉर्टिंग एल्गोरिदम है जिसके बारे में मुझे पता नहीं है, जो कि इस तरह की छोटी सर्किटिंग की अनुमति देगा?
यह अंतिम भाग गलत है; कंपाइलर इरादे का अनुमान नहीं लगा सकते हैं! – porges
पोर्गेस: हालांकि विशिष्ट मामलों में इरादे का विश्लेषण करने के लिए कंपाइलर को कड़ी मेहनत की जा सकती है, लेकिन ** ** ** को * इरादा * अनुमान लगाने की आवश्यकता नहीं है। आपको यह साबित करने के लिए सिद्ध किया गया है कि कोड का अनुकूलित संस्करण गणितीय रूप से मूल संस्करण के बराबर है। कार्यात्मक भाषाएं इस प्रमेय को दुष्प्रभावों को अस्वीकार कर आसान साबित करती हैं। –
संभवतः, लेकिन मुझे अपने ऑप्टिमाइज़ेशन पास के हिस्से के रूप में स्वचालित प्रमेय प्रोवर्स को शामिल करने के बजाय किसी भी हास्केल कंपाइलर्स के बारे में पता नहीं है। कार्य कार्यों की यह संरचना पूरी तरह से हास्केल की डिफ़ॉल्ट आलसी प्रकृति के कारण है। – porges