2012-06-28 16 views
21

में वर्तमान कार्य निर्देशिका को देखने के लिए मैंने अपने आप को हास्केल सिखाना शुरू कर दिया है, और इसके लिए मैंने विंडोज के लिए The Haskell Platform इंस्टॉल किया है। मैं अभी तक WinGHCi का उपयोग कर रहा हूं। मैंने सीखा है कि इसमें :cd कमांड है जिसका उपयोग निर्देशिका को बदलने के लिए किया जाता है। लेकिन सवाल यह है कि, मैं कैसे जानूंगा कि मैं वर्तमान में कौन सी निर्देशिका में हूं? यह जानने के बिना कि मैं निर्देशिका क्यों बदलना चाहता हूं। मैंने बहुत कुछ खोजा लेकिन जवाब नहीं मिला।WinGHCi

कृपया मुझे बताएं कि वर्तमान कार्यशील निर्देशिका को जानने का कोई तरीका है या नहीं। अधिमानतः मैं वर्तमान निर्देशिका को दिखाने के लिए कमांड प्रॉम्प्ट को कॉन्फ़िगर करना चाहता हूं, लिनक्स के कंसोल की तरह।


के बाद @ डैनियल के सुझाव, मैं इन किया:

  • जब से मैं विंडोज 7 पर काम किया, वहाँ, कोई .ghci फ़ाइल (मुझे लगता है कि यूनिक्स की तरह ओएस के लिए है) है तो मैं एक बनाया C:\Users\Apelles\AppData\Roaming\ghc फ़ोल्डर में it is instructed here के रूप में फ़ाइल करें।
  • कॉपी ने स्क्रिप्ट को डैनियल के उत्तर से ghci.conf पर चिपकाया।
  • फिर मैंने ghci.exe शुरू किया जो कंसोल जैसी खिड़की है। मैंने देखा कि यह आमतौर पर पहले लोड करने के लिए उपयोग किए जाने वाले कुछ मॉड्यूल लोड करता है।

enter image description here

आप देख सकते हैं इसे और अधिक मॉड्यूल को लोड करता है, और अंतिम पंक्ति कहते हैं,

शीघ्र स्ट्रिंग पार्स नहीं कर सकते: यहाँ स्नैपशॉट है। हास्केल वाक्यविन्यास का प्रयोग करें।

इसका क्या अर्थ है? कौन सी रेखा समस्या पैदा कर रही है (निम्न स्क्रिप्ट से)? enter image description here

जैसा कि मैंने पहले भी कहा है, यह मॉड्यूल की कम संख्या है, जो का मतलब लोड करता है:

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

इसके अलावा, अगर मैं कुछ यादृच्छिक नाम के ghci.conf फ़ाइल का नाम बदलें, और फिर ghci.exe शुरू करते हैं, यह इन मॉड्यूल को लोड करता है ghci.conf, ghci.exe कुछ सफलतापूर्वक करता है, लेकिन किसी बिंदु पर विफल रहता है। इसे कैसे ठीक करें?

+8

'प्रस्तावना> कोशिश करें! pwd' (या जो भी विंडोज़ 'पीडब्ल्यूडी के बराबर है)। मुझे लगता है कि WinGHCi नीचे एक साधारण ghci चलाता है, तो यह काम करना चाहिए। –

+0

@DanielFischer: यह बहुत अच्छा काम करता है। कमांड प्रॉम्प्ट को स्वयं कॉन्फ़िगर करना संभव होगा? – Nawaz

+0

हां, आप प्रॉम्प्ट को कॉन्फ़िगर कर सकते हैं 'सेट सेट प्रॉम्प्ट जो भी' (ghci कमांड पर छोटी मदद के लिए टाइप करें:? ')। हालांकि, प्रति सत्र है। इसे स्थायी बनाने के लिए, इसे अपनी '.ghci' फ़ाइल में करें (मुझे लगता है कि उन्हें विंडोज़ पर अलग-अलग कहा जाता है, याद रखें)। मुझे यकीन नहीं है कि इसे वर्तमान निर्देशिका में कैसे सेट करें, हालांकि। –

उत्तर

3

एक गरीब आदमी का वर्तमान कार्यशील निर्देशिका को GHCi शीघ्र स्थापित करने के लिए समाधान .ghci फ़ाइल में

let cur fill = do { cwd <- System.Directory.getCurrentDirectory; return (":set prompt \"" ++ cwd ++ fill ++ " \""); } 
:def doprompt (\_ -> cur ">") 
:def mycd (\dir -> System.Directory.setCurrentDirectory dir >> cur ">") 
:doprompt 

डाल दिया जाएगा।

पहली पंक्ति में, हम cur :: String -> IO String को परिभाषित करते हैं जो वर्तमान निर्देशिका प्राप्त करता है और उसके अनुसार प्रॉम्प्ट सेट करने के लिए ghci कमांड देता है। फिर हम एक ghci कमांड doprompt परिभाषित करते हैं जो उस क्रिया को निष्पादित करता है और निर्देशिका बदलने के लिए कमांड करता है और प्रॉम्प्ट सेट करता है। स्टार्टअप पर अंतिम पंक्ति :doprompt निष्पादित करती है।

दुर्भाग्य से, कि :cd dir निर्देशिका के परिवर्तन दिखाने के लिए नहीं है, एक बाद में एक मैनुअल :doprompt क्या करना है, या :mycd का उपयोग निर्देशिका बदलने के लिए होगा।

बहुत लंबे संकेतों से बचने के लिए, कोई फ़ाइल पथ के प्रारंभिक भाग को छोड़कर getCurrentDirectory के परिणाम में हेरफेर कर सकता है।

उस साधारण दृष्टिकोण में एक और कमी यह है कि प्रॉम्प्ट में अब लोड किए गए मॉड्यूल के बारे में जानकारी नहीं है। मेरा मानना ​​है कि उन सभी को दूर किया जा सकता है, लेकिन अब मैं खुदाई करने के लिए पर्याप्त प्रेरित नहीं हूं।

+0

मुझे इसे आज़माएं। जवाब देने का प्रयास करने के लिए +1 के लिए +1। – Nawaz

+0

मैंने इसे विंडोज़ पर आजमाया, और यह काम नहीं किया। मैंने अपने प्रश्नों के साथ जो कुछ किया, मैंने जोड़ा। इसे देखें। – Nawaz

+0

मुझे यह सुनकर खेद है। कोई संकेत क्या असफल रहा? (मुझे अभी तक आपके प्रश्न में कोई संपादन नहीं दिखाई देता है) –