2012-02-23 15 views
7

क्या यह हास्केल आईओ का उचित दृश्य है?क्या यह हास्केल आईओ का उचित दृश्य है?

जब एक कार्यक्रम को देखते हुए, हास्केल क्रम निम्नलिखित है: वापस एक "आईओ गणना"

  • यह तो कार्यान्वित या प्राप्त करने के लिए

    1. कॉल main "चलाता है" कि गणना जिससे पक्ष के सभी प्रदर्शन गणना गणना करता है।

    यह दो चरण दृष्टिकोण एक शुद्ध कार्य बने रहने के लिए main की अनुमति देता है।

    इस मामले में एक आईओ गणना हैस्केल के एक विशेष संस्करण की तरह है जिसमें स्पष्ट अनुक्रमण है - या शायद इसका वर्णन करने का एक बेहतर तरीका है?

  • +0

    यह वास्तव में एक बहुत अच्छी व्याख्या है। लेकिन, हास्केल में, मुख्य कार्य नहीं है, केवल एक मान है। (फ्रीज, ओटीओएच में, यह एक फ़ंक्शन है, क्योंकि इसे पास किए गए कमांड लाइन तर्कों की सूची मिलती है) – Ingo

    +1

    यह काफी काम नहीं करता है, क्योंकि गणना के परिणाम भविष्य की गणनाओं को प्रभावित कर सकते हैं (उदा। 'GetLine')। – ehird

    +6

    @ehird हां यह करता है। '>> =' आईओ मूल्यों का निर्माण करने का एक तरीका है। हार्ड पार्ट्स आते हैं जैसे अपवाद –

    उत्तर

    12

    हाँ, यह एक सभ्य अर्थपूर्ण मॉडल है कि कार्यक्रम कैसे निष्पादित किए जाते हैं। कार्यान्वयन इस तरह काम नहीं करता है, लेकिन आप अभी भी उस मॉडल का उपयोग प्रोग्राम के बारे में तर्क के लिए कर सकते हैं।

    लेकिन अधिक आम तौर पर, IO क्या आपको अनिवार्य कार्यक्रमों को शुद्ध मूल्यों के रूप में इलाज करने की अनुमति देता है। Monad संचालन तब आपको अनिवार्य कार्यक्रमों को छोटे अनिवार्य कार्यक्रमों से लिखने की अनुमति देता है (या इस संदर्भ में सामान्य शब्द का उपयोग करने के लिए, क्रिया) और शुद्ध कार्य। तो पूरी तरह से कार्यात्मक मॉडल, जबकि यह अनिवार्य कार्यक्रम निष्पादित नहीं कर सकता है, अभी भी का वर्णन IO a के प्रकार के रूप में कर सकता है, और संकलक इन विवरणों को अनिवार्य कोड में अनुवाद कर सकता है।

    या आप इस कह सकते हैं:

    • संकलक (क्रम नहीं) का मूल्यांकन करता है main
    • उस मूल्यांकन का परिणाम एक अनिवार्य कार्यक्रम है।
    • यह प्रोग्राम लक्ष्य निष्पादन योग्य को सहेजा गया है।
    • फिर आप लक्ष्य कार्यक्रम निष्पादित करते हैं।

    यानी, "मूल्यांकन main" अपने मॉडल का हिस्सा संकलक करने के लिए धक्का दिया है, और के रूप में आप पहली बार में वर्णन क्रम में नहीं है।

    +0

    +1 मुझे स्पष्टीकरण पसंद है कि "कंपाइलर मुख्य मूल्यांकन करता है", हालांकि आप एक कंपाइलर के साथ किसी भी प्रोग्रामिंग भाषा के बारे में कह सकते हैं। लेकिन आपने मुख्य बिंदु पर सीधे मुख्य बिंदु मारा: हास्केल अलग है क्योंकि आप * छोटे आईओ कार्यों से * IO क्रियाएं लिखते हैं। –

    +0

    @ डैन बर्टन इस के साथ मेरी समस्या यह है कि "कंपाइलर" या "रनटाइम" के लिए अपील हस्केल का मूल्यांकन करने का एक विशेष तरीका लगाती है। आखिरकार, हग्स "संकलित" मुख्य करते हैं, यह इसका अर्थ है। जितना संभव हो हमें इस कार्यक्रम के बारे में बात करनी चाहिए, न कि कुछ पौराणिक संकलक इसके साथ क्या करता है। कंपाइलर्स तस्वीर में आते हैं जब हमें विस्तृत लागत मॉडल की आवश्यकता होती है, लेकिन वास्तव में केवल तब ही। –

    +0

    @ फिलिपजेएफ मैं आपकी स्थिति के प्रति सहानुभूतिशील हूं, लेकिन फिर भी, "कंपाइलर" या "रनटाइम" के बारे में बात करना अभी भी कई लोगों के लिए व्यावहारिक मूल्य है। एक कदम पत्थर के रूप में इसके बारे में सोचो। या इस तरह: अक्सर एक नवागंतुक को एक उन्नत विषय सिखाने का सबसे अच्छा तरीका उनको "झूठ" देना है, और फिर, "झूठ" को अवशोषित करने के बाद, समझाया कि प्रारंभिक झूठ कैसे कम हो जाता है। इस मामले में, अच्छी बात यह है कि कमी यह है कि हम भाषा के कार्यान्वयन के तरीके से स्वतंत्र रूप से कार्यक्रमों के बारे में कारण बनने में सक्षम होना चाहते हैं। –

    6

    IO का आपका दृश्य अच्छा है, लेकिन मैं इस लाइन

    मुख्य कॉल वापस एक "आईओ गणना"

    सोचने के लिए के बारे में हास्केल वह यह है कि सबसे अच्छा तरीका है पाने के लिए के साथ एक समस्या है कार्य कुछ भी नहीं करते हैं। इसके बजाय, आप घोषणा करते हैं कि क्या मानते हैं। एक कार्यक्रम में IO मान का विवरण होता है जिसे main कहा जाता है। एकमात्र भावना जिस पर यह "मुख्य कहता है" यह है कि main की घोषणा कमजोर हेड सामान्य फॉर्म (या कुछ समान) तक कम हो गई है।

    IO मनमाने ढंग से दुष्प्रभाव-पूर्ण गणना का प्रकार है।हास्केल का शुद्ध सबसेट मूल्यों का एक पूरी तरह से घोषणात्मक वर्णन है, जो अनिश्चित वर्णनों की अनुमति देता है। सेट सिद्धांत के रूप में गणितीय भाषा के रूप में हास्केल के बारे में सोचें। सेट सिद्धांत में वक्तव्य कुछ भी नहीं करते हैं, लेकिन उनमें जटिल कंप्यूटेशंस शामिल हो सकते हैं जैसे "सबसे छोटा सेट जिसमें अर्कर्मन_फंक्शन (30)" शामिल है। वे "एस = उन सभी सेटों के सेट भी शामिल कर सकते हैं जिनमें स्वयं शामिल नहीं है"

    @amindfv आधा दाएं है: main "शुद्ध कार्य" नहीं है। यह बिल्कुल एक समारोह नहीं है। यह एक मूल्य है, शुद्ध कमी द्वारा परिभाषित, एन्कोडिंग अस्पष्ट गणना।

    +0

    मुझे लगता है कि पोस्टर अनिवार्य प्रोग्रामर के लिए सारांश का अधिक लक्ष्य रख रहा है। हास्केल में हम "कॉल" के बजाय "मूल्यांकन" कहेंगे, लेकिन अन्यथा यह काफी समान है। "आईओ गणना" भी "आईओ monad" का एक रूप है। मुझे लगता है कि 'सच्चे हास्कल्सपीक' में हम कहेंगे कि रनटाइम "आईओ मोनैड में एक मूल्य प्राप्त करने के लिए मुख्य मूल्यांकन करता है", लेकिन यह सिर्फ पैडेंटिक है। मूल वाक्य अनिवार्य प्रोग्रामर को समझाए जाने के लिए ठीक काम करता है। :) – porges

    +0

    मुझे लगता है कि "आईओ गणना" ज्यादातर समय "आईओ monad" के लिए बेहतर है। पैडेंटिक होने के नाते: पोस्टर की समझ पहले से ही बहुत अच्छी थी, मैं गहराई से खोदना चाहता था। मेरे परिप्रेक्ष्य से, "हास्कली सोचने" के बारे में सबसे महत्वपूर्ण बात भाषा को "कर" के रूप में नहीं सोच रही है, बल्कि इसके बारे में "होने" के बारे में सोच रही है। "कॉल" में अधिक प्रक्रियात्मक सामान होता है, और यह जरूरी नहीं है: "बुलाया" के बजाय मुख्य "संकलित" के sacundim का विवरण देखें। मुझे लगता है कि कैसे "मूल्यांकन" के बारे में ज्यादा जानकारी के बिना denotation के लिए चिपक जाती है। विचार एक गहरी समझ है। –

    संबंधित मुद्दे