2014-10-06 9 views
14

मैं इस पुस्तक का वर्णन किसी पुस्तक से एक उदाहरण का उपयोग करके करता हूं।शैक्षिक/सीखने के उद्देश्यों के लिए हास्केल के मूल्यांकन (पुनर्लेखन) चरणों को प्रिंट करना। क्या यह संभव है?

साइमन थॉम्पसन की किताब "हास्केल फंक्शनल प्रोग्रामिंग का शिल्प" पृष्ठ 82 पर (नीचे दी गई छवियां देखें) को fac 4 के लिए मूल्यांकन चरण दिखाए जाते हैं।

प्रश्न:

क्या यह संभव है कुछ उपकरण या कुछ "हास्केल डिबगर" है कि बाहर मूल्यांकन चरण हैं, जो GHCi का उपयोग करता है जब यह fac 4 का मूल्य मूल्यांकन करेगा लिखते थे उपयोग करने के लिए?

शैक्षिक और सीखने के उद्देश्यों के लिए, एक मानव पठनीय प्रारूप में पसंदीदा रूप से।

प्रत्येक मूल्यांकन चरण के लिए कुछ स्वचालित स्पष्टीकरण होना भी अच्छा होगा, उदाहरण के लिए पुनरावृत्ति चरण में समीकरण का उपयोग किया गया था।

मेरा मुख्य उद्देश्य सरल शैक्षिक हास्केल उदाहरण प्रोग्राम (जैसे fac) चलाते समय पुनर्लेखन चरणों को कैसे किया जाता है, इसकी गहरी समझ हासिल करना है।

क्या ऐसा करने का कोई तरीका है? यदि हां, तो कैसे?

enter image description here

enter image description here

+0

[सरल-प्रतिबिंबित] (https://hackage.haskell.org/package/simple-reflect) इनमें से कुछ कर सकते हैं। लेकिन जब यह सूचियों और मानचित्रों जैसे साधारण सामानों के लिए उपयोगी है, यह सबकुछ के लिए काम नहीं करता है। – genisage

+0

आप इसे प्रोलॉग (पागल विचार;) और [ट्रेस इट] (http://i.imgur.com/AKCFefx.png) में परिवर्तित कर सकते हैं ... (दिखाया गया है एसडब्ल्यूआई-प्रोलॉग का ग्राफिकल डीबगर)। सबसे सरल सामान के लिए काम करता है। बीटीडब्ल्यू पुस्तक कुछ कदम छोड़ती है (मूल्य तुरंत मजबूर नहीं होते हैं, लेकिन केवल शून्य के साथ तुलना करते समय)। Prolog - क्योंकि इसके नियम भी खंड आधारित हैं। –

उत्तर

9

हाँ और नहीं, मैं अभी तक एक उपकरण नहीं देखा है कि इस पंक्ति-दर-पंक्ति मूल्यांकन है कि आपके पाठ्यपुस्तक में दिखाया गया है करता है - ज्यादातर क्योंकि एक हास्केल प्रोग्राम अभिव्यक्तियों का कोई "पुनर्लेखन" नहीं करता है।

हालांकि, एक उपकरण है जो हास्केल की वास्तविक मूल्यांकन रणनीति, चरण-दर-चरण: ghc-vis को विज़ुअलाइज़ करता है। परिणाम का मूल्यांकन करने और इसे ghci जैसे कंसोल पर प्रदर्शित करने के बजाय, यह अनियमित परिणाम का एक ग्राफिकल प्रतिनिधित्व प्रदर्शित करता है - और जब तक आप आदिम मूल्यों और संरचनाओं तक नहीं पहुंच जाते, तब तक आप इसे थंक द्वारा थंक के मूल्यांकन को मजबूर कर सकते हैं।

यह क्या कर सकते हैं का एक उदाहरण के रूप में, यहाँ अनंत फाइबोनैचि अनुक्रम की तीसरी सूची सदस्य जब तक मूल्यांकन है:

0, 1 and 1 are evaluated, the rest of the list is a thunk referring back to parts of the list itself http://felsin9.de/nnis/ghc-vis/fib1.svg

स्रोत: examples section of the project website। आपको उन सभी को देखना चाहिए!

+0

क्या यह पूर्ण हास्केल से निपट सकता है? उदाहरण के लिए प्रकार कक्षाओं और मोनाड्स के साथ? मुझे विज़ुअलाइज़ेशन देखना अच्छा लगेगा कि राज्य मोनैड ब्रायन बेकमैन वीडियो व्याख्यान में कैसे काम करते हैं। – jhegedus

+0

यह पुनर्लेखन चरणों को देखने से भी अधिक शैक्षिक हो सकता है! – jhegedus

+0

अधिक विशेष रूप से, ब्रायन बेकमैन के वीडियो व्याख्यान यहां हैं: http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-The-Zen-of-Expressing-State-The-State-Monad)। – jhegedus

1

यह एक बहुत अनुरोध किया है और अत्यधिक उपयोगी सुविधा — जो, के रूप में सबसे अच्छा मुझे पता है, कहीं भी उपलब्ध नहीं है। :-(

+7

"क्या यह करना संभव है?" "नहीं।" यह सवाल का जवाब कैसे नहीं देता है? – MathematicalOrchid

+1

बेशक यह करना संभव है। ऐसा कोई उपकरण नहीं है जो मुझे पता है कि यह मेरी संतुष्टि के लिए करता है, लेकिन ऐसा कोई कारण नहीं है कि आप एक नहीं लिख सकें। – genisage

+0

बेशक मेटास्टैटिक कैंसर के साथ 100 साल तक जीना संभव है, आपको बस इसके लिए एक इलाज ढूंढना होगा। ऐसा कोई कारण नहीं है जिसे आप नहीं ढूंढ सके। – jhegedus

10

Lambda bubble pop नामक एक उपकरण है जहां आप अभिव्यक्ति पर क्लिक कर सकते हैं यह देखने के लिए कि अभिव्यक्ति कैसे कम हो रही है। ध्यान दें कि टूल केवल इंटीग्रर्स और सूचियों का समर्थन करता है, लेकिन फिर भी यह एक अच्छा शैक्षणिक टूल है। कार्रवाई में उपकरण की

स्नैपशॉट:

enter image description here

+0

दिलचस्प लग रहा है। क्या यह समर्थन प्रकार वर्ग है? मोनाड्स? बीजगणित डेटा प्रकार? यद्यपि सफारी दुर्घटनाग्रस्त लगता है। – jhegedus

+0

हम्म, ऐसा लगता है कि इनमें से कोई भी उन्नत अवधारणा अभी तक लागू नहीं की गई है। – jhegedus

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

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