2008-12-04 22 views
7

मैं अपने हास्केल पर थोड़ा सा जंगली हूं और बैक अप रैंप करना चाहता हूं। एक चीज जिसे मैं एफ # से आनंद लेता हूं वह विजुअल स्टूडियो के साथ एकीकृत एफ # इंटरएक्टिव खोल है: मैं लगभग कुछ भी (फ़ंक्शन और क्लास परिभाषाओं सहित) का मूल्यांकन कर सकता हूं और एक शेल के रूप में F # का उपयोग कर सकता हूं। क्या हास्केल में बराबर है? जब मैं ghci का उपयोग करता हूं, तो मैं फ़ंक्शन परिभाषाओं का मूल्यांकन नहीं कर सकता। आप इसके आसपास कैसे काम करते हैं?हास्केल इंटरएक्टिव

मेरी वर्तमान पसंदीदा सेटिंग हैकेल-मोड के साथ Emacs का उपयोग कर रही है और एक इंटरैक्टिव जीएच दुभाषिया खोल रही है। हालांकि, क्या फ़ाइल के केवल क्षेत्र का मूल्यांकन करने का कोई तरीका है?

उत्तर

8

आप 'जाने' का उपयोग कर एक समारोह को परिभाषित कर सकते हैं: इसके अलावा

$ ghci 
Prelude> let double n = n + n 
Prelude> double 42 
84 

, मैं काफी यह सुझाव नहीं देंगे, क्योंकि (ए) मैं इसे लिखा था, और (बी) यह बहुत अविकसित है, लेकिन Halp कर सकते हैं Emacs में आसान हो - यह आपके स्रोत-कोड बफर में एकीकृत Haskell कोड के लिए एक स्प्रेडशीट की तरह थोड़ा सा है। आपके पास रुचि रखने वाले अभिव्यक्तियों का एक सेट हो सकता है और एक कीस्ट्रोक के साथ अंतिम पुनर्मूल्यांकन के बाद से उनके सभी मान आपके संपादन के आधार पर कैसे बदलते हैं।

+1

धन्यवाद। हल्प वास्तव में आसान दिखता है। मैं इसे आजमा रहा हूँ :) – namin

+1

कूल! सुधारों का स्वागत किया जाएगा - पायथन संस्करण अधिक पॉलिश है क्योंकि मैं पाइथन का अधिक उपयोग करता हूं। –

1

ghci इस तरह की चीजों को करने के लिए कुछ विशेष वाक्यविन्यास प्रदान करता है। फ़ंक्शन परिभाषाओं के लिए let का उपयोग करें। हालांकि, यह GHC FAQ पर ध्यान दिया गया है कि यह जटिल कार्यों के साथ मुश्किल हो सकता है और आमतौर पर फ़ाइल से लोड करना पसंद किया जाता है। यदि आप Emacs जैसे कुछ का उपयोग करते हैं जो आपकी स्रोत फ़ाइल और एक ghci प्रक्रिया के बीच आसान एकीकरण की अनुमति देता है, तो यह एक गैर-मुद्दा बन जाता है क्योंकि आप अपनी परिभाषा को एक कीस्ट्रोक के साथ दुभाषिया में लोड कर सकते हैं।

+0

Emacs में, क्या फ़ाइल के किसी क्षेत्र को पूरी फ़ाइल के विपरीत लोड करने का कोई तरीका है? Haskell-GHCi-लोड फ़ाइल Haskell-GHCi मोड Haskell-GHCi-पुनः लोड फ़ाइल Haskell-GHCi शो-GHCi-बफर Haskell-GHCi-प्रारंभ: – namin

+0

नहीं है, यहाँ Haskell मोड GHCi आदेशों हैं प्रक्रिया आपको बस लोड/पुनः लोड समर्थन मिलता है। –

0

O'Caml और F # के साथ, परिभाषाएं फ़ाइल के शीर्ष से आगे बढ़ती हैं। हालांकि, हास्केल में, किसी फ़ाइल में पहले परिभाषित एक प्रकार या फ़ंक्शन उस फ़ाइल में बाद में किसी प्रकार या फ़ंक्शन का संदर्भ दे सकता है। तो हास्केल में, एक मॉड्यूल को एक साथ संकलित करने की आवश्यकता होती है। एक इंटरेक्टिव पाश संकलन के साथ-साथ एक साथ असंगत है।

2

Emacs के लिए हास्केल मोड intepreter के साथ काम के लिए कार्यों प्रदान करते हैं। इसलिए यदि आप संपादित करने वाले मॉड्यूल से कुछ फ़ंक्शन चलाने के लिए चाहते हैं, तो आप वर्तमान मॉड्यूल को ghci (या किसी अन्य हैकेल इंटरैक्टिव) पर लोड करने के लिए सीसी क्ल का उपयोग कर सकते हैं और इंटरैक्टिव के साथ बफर पर स्विच कर सकते हैं और कुछ कमांड निष्पादित कर सकते हैं

2

जैसा कि आप ' हमने देखा है कि जीएचसीआई यह कर सकता है कि यह क्या कर सकता है --- कम कार्य या अभिव्यक्ति कमांड लाइन पर आसान है। बाकी के लिए मैं खुद को मॉड्यूल लोड कर रहा हूँ। कठिनाइयों में से एक यह है कि हास्केल में का उपयोग करने से पहले परिभाषा नहीं है, इसलिए फ़ाइल के अर्थपूर्ण खंड को खींचना अक्सर मुश्किल होता है। मैं आम तौर पर खुद को छोटे मॉड्यूल को परिभाषित करता हूं और उन्हें लोड और पुनः लोड करता हूं। इंटरेक्टिव अनुभव निश्चित रूप से उतना अच्छा नहीं है जितना कि कोई चाहें।

0

एमेक्स हास्केल मोड 2.8 के साथ संयुक्त फ्लाईमेक बहुत अच्छी तरह से काम करता है और आपको प्रकार चेकर की तत्काल प्रतिक्रिया मिलती है। मेरी आंखों में यह अधिक संवादात्मक है।

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