2010-12-03 16 views
6

के लिए सामान्य लिस्प युक्तियाँ सीखना मैं एक अनुभवी सी ++/.NET/जावा विंडोज/वेब प्रोग्रामर सीखने की कोशिश कर रहा हूं (सामान्य) लिस्प। मैं Practical Common Lisp पढ़ रहा हूं और SLIME का उपयोग कर रहा हूं।विंडोज/सी ++ प्रोग्रामर

मैं आसानी से पर्याप्त लिस्प भाषा हो रही है, लेकिन मैं विकास के यांत्रिकी groking समस्या हो रही है। मेरे मुद्दों में से एक Emacs से निपट रहा है। मुझे इसके साथ कोई अनुभव नहीं है और यह आमतौर पर आदेशों को ढूंढने/समझने के लिए मुश्किल से भ्रमित लगता है।

विशिष्ट प्रश्न:

  • मैं REPL मिलता है, लेकिन मैं काफी मैं इसे कैसे प्रभावी ढंग से उपयोग कर सकते हैं नहीं मिलता है। जब मुझे फ़ंक्शन बदलने की आवश्यकता होती है तो मुझे डिफ्यून को फिर से टाइप करना होगा और परिवर्तन करना होगा (थकाऊ और त्रुटि प्रवण)। मैं इसे बेहतर कैसे कर सकता हूं?
  • वास्तव में प्रोग्राम करने के लिए आरईपीएल में कोड दर्ज करने से मैं कैसे प्राप्त करूं? मुझे सी मॉडल में उपयोग किया जाता है जहां आपके पास कोड फाइलें हैं जिन्हें आप समीक्षा, संपादित और पुन: संकलित कर सकते हैं। मुझे पता है कि लिस्प के पास कुछ समान है (लोड फ़ंक्शन के माध्यम से), लेकिन किसी को एक फ़ंक्शन कैसे मिलता है जिसे मैंने सहेजने के लिए फ़ाइल में परिभाषित और परीक्षण किया है? मुझे उम्मीद है कि मेरे वर्तमान चयन + कॉपी + पेस्ट से बेहतर तरीका है।
  • आप त्रुटियों को डीबग कैसे करते हैं? क्या कोड में कदम उठाने की कोई क्षमता है जैसे मैं अन्य भाषाओं के साथ करता हूं?
  • जब तक एस-अभिव्यक्ति मान्य है, मुझे (defun ...) दर्ज करते समय कोई त्रुटि नहीं मिलती है। यह तब तक नहीं है जब तक मैं इसका उपयोग करने की कोशिश नहीं करता कि मुझे पता चलता है कि यह मान्य नहीं है। क्या त्रुटियों को जल्द से जल्द प्राप्त करने का कोई तरीका है (यानी कोड संकलित करें)?
  • क्या कोई आईडीई है जो मुझसे अधिक परिचित होगी या मुझे भाषा के साथ खेलने की अनुमति देगी?
  • क्या मुझे इसके बजाय Scheme सीखने के लिए स्विच करना चाहिए?

कोई युक्ति बहुत सराहना की जाएगी!

+1

आप क्लोजर में भी देखना चाहते हैं; यह एक लिस्पी है जो जेवीएम पर चलती है और इसमें अच्छा इंटरऑप है। जावा के साथ मैंने अभी तक इसके साथ काम नहीं किया है, लेकिन इस पर कुछ व्याख्यान देखे हैं, और यह अच्छा लग रहा है। – paul

उत्तर

5

-मुझे आरईपीएल मिलती है, लेकिन मुझे यह नहीं पता कि मैं इसका प्रभावी ढंग से उपयोग कैसे कर सकता हूं। जब मैं को फ़ंक्शन को बदलने की आवश्यकता है तो मुझे डिफ्यून को फिर से टाइप करें और (थकाऊ और त्रुटि प्रवण) परिवर्तन करें। मैं कैसे बेहतर कर सकता हूं?

-मैं आरईपीएल में कोड दर्ज वास्तव में एक कार्यक्रम करने के लिए से मिलता है? मुझे सी मॉडल में उपयोग किया जाता है जहां आपके पास कोड फ़ाइलें हैं जिन्हें आप समीक्षा कर सकते हैं, संपादित करें और पुन: संकलित करें। मैं जानता हूँ कि तुतलाना कुछ इसी तरह (लोड समारोह के माध्यम से) है, लेकिन कैसे एक एक समारोह मैं सिर्फ परिभाषित प्राप्त करता है और एक फ़ाइल में परीक्षण किया बचाया जा? मुझे उम्मीद है कि मेरे वर्तमान चयन + कॉपी + पेस्ट से बेहतर तरीका है।

लोड कीचड़। अपने .lisp फ़ाइल में कोड दर्ज करें, और फिर अपने सभी कोड को लिस्प में लोड करने के लिए slime-eval-buffer चलाएं। फिर, एक विशिष्ट फ़ंक्शन के लिए आप अपने चल रहे लिस्प में इसे फिर से परिभाषित करने के लिए सी-ई, सी-जे पर हैकिंग कर रहे हैं।

क्या तुम त्रुटियों डीबग करूँ? क्या कोड में कदम उठाने की कोई क्षमता है जैसे मैं अन्य भाषाओं के साथ करता हूं?

हां।(trace 'my-function) - या उस पर कुछ संस्करण - और जब my-function कहा जाता है, तो यह डीबगर में टूट जाएगा।

-जब तक एस-अभिव्यक्ति मान्य है, मुझे (defun ...) दर्ज करते समय कोई त्रुटि नहीं मिलती है। यह तब तक नहीं है जब तक कि मैं का उपयोग नहीं करता, इसका उपयोग करता हूं कि मुझे पता चलता है कि यह मान्य नहीं है। क्या जल्द ही त्रुटियों को पाने के लिए कोई तरीका है (यानी कोड संकलित करें)?

कुछ डिग्री के लिए, यह गतिशील भाषाओं (पायथन, पर्ल, रूबी, लिस्प, इत्यादि) की विशेषता है। बेहतर त्रुटि-जांच के लिए SBCL आज़माएं।

- क्या वहां कुछ आईडीई है जो मुझसे अधिक परिचित होंगी या मुझे भाषा के साथ खेलने की अनुमति देगी?

Emacs लिस्प के लिए मुफ्त आईडीई है। एलेग्रो का एक मुफ़्त संस्करण है जो मेरा मानना ​​है; मैंने कभी कोशिश नहीं की है ..

- क्या मैं इसके बजाय सीखने की योजना में स्विच कर सकता हूं?

नहीं, योजना व्यावहारिक भाषा नहीं है।

1

मैं एक अनुभवी सी ++/.NET/जावा विंडोज/वेब प्रोग्रामर सीखने की कोशिश कर रहा हूं (सामान्य) लिस्प। मैं प्रैक्टिकल कॉमन लिस्प पढ़ रहा हूं और एसएलईएमई का उपयोग कर रहा हूं।

कोई भी लिस्प सीखने के लिए LispWorks Personal Edition का उपयोग कर सकता है। इसमें कुछ सीमाएं हैं और पूर्ण उत्पाद वाणिज्यिक है, लेकिन इसका उपयोग करना काफी आसान है।

मुझे आरईपीएल मिलती है, लेकिन मुझे यह नहीं पता कि मैं इसका प्रभावी ढंग से उपयोग कैसे कर सकता हूं। जब मुझे फ़ंक्शन बदलने की आवश्यकता होती है तो मुझे डिफ्यून को फिर से टाइप करना होगा और परिवर्तन करना होगा (थकाऊ और त्रुटि प्रवण)। मैं इसे बेहतर कैसे कर सकता हूं?

आरईपीएल का इतिहास है। कीबोर्ड कमांड के साथ आप पहले इनपुट वापस ले सकते हैं और इसे बदल सकते हैं। इसके अलावा बस एक लिस्प फ़ाइल संपादित करें और वहां से कोड संकलित करें। लिस्प में आप व्यक्तिगत अभिव्यक्तियों और परिभाषाओं को संकलित/eval कर सकते हैं। एसएलएमईई, LispWorks या Allegro CL जैसे विशिष्ट आईडीई आपको सामान्य लिस्प टेक्स्ट विंडो से भी कोड चलाने की अनुमति देते हैं - इसके अलावा REPLA (उर्फ श्रोता) में अभिव्यक्ति निष्पादित करने के लिए।

वास्तव में प्रोग्राम करने के लिए आरईपीएल में कोड दर्ज करने से मैं कैसे प्राप्त करूं? मुझे सी मॉडल में उपयोग किया जाता है जहां आपके पास कोड फाइलें हैं जिन्हें आप समीक्षा, संपादित और पुन: संकलित कर सकते हैं। मुझे पता है कि लिस्प के पास कुछ समान है (लोड फ़ंक्शन के माध्यम से), लेकिन किसी को एक फ़ंक्शन कैसे मिलता है जिसे मैंने सहेजने के लिए फ़ाइल में परिभाषित और परीक्षण किया है? मुझे उम्मीद है कि मेरे वर्तमान चयन + कॉपी + पेस्ट से बेहतर तरीका है।

कॉपी और एक बात में पेस्ट। लेकिन एक संपादक विंडो में एक पाठ फ़ाइल से काम करने का सही तरीका है। कोई अभिव्यक्ति संकलित/संपादक बफर या संबंधित फ़ाइल को संकलित कर सकता है।

आप त्रुटियों को कैसे डीबग करते हैं? क्या कोड में कदम उठाने की कोई क्षमता है जैसे मैं अन्य भाषाओं के साथ करता हूं?

स्टीप, ट्रेसी और संबंधित देखें। एसएलएमईई, लिस्पॉर्क्स और एलेग्रो सीएल में कई अतिरिक्त सुविधाएं हैं।

जब तक एस-अभिव्यक्ति मान्य है, मुझे (defun ...) दर्ज करते समय मुझे कोई त्रुटि नहीं मिलती है। यह तब तक नहीं है जब तक मैं इसका उपयोग करने की कोशिश नहीं करता कि मुझे पता चलता है कि यह मान्य नहीं है। क्या त्रुटियों को जल्द से जल्द प्राप्त करने का कोई तरीका है (यानी कोड संकलित करें)?

कई मामलों में कोई एक कंपाइलर का उपयोग करता है। कंपाइलर को त्रुटियों की एक श्रृंखला मिल जाएगी और कुछ भी असामान्य होने पर भी ध्यान दिया जाएगा (उदाहरण के लिए कोई फ़ंक्शन मौजूद नहीं है या एक चर परिभाषित नहीं किया गया है)।

- क्या वहां कुछ आईडीई है जो मुझसे अधिक परिचित होंगी या मुझे भाषा के साथ खेलने की अनुमति देगी?

लिस्पॉर्क्स, एलेग्रो सीएल विंडोज के तहत सर्वश्रेष्ठ हैं। Corman Lisp जैसे कुछ विकल्प हैं (मुझे नहीं पता कि यह अभी बनाए रखा गया है) या यहां तक ​​कि यूफासॉफ्ट लिस्प।

क्या मुझे इसके बजाय सीखने की योजना में स्विच करना चाहिए?

वास्तव में नहीं।

1

ऐसा लगता है कि आप वास्तव में SLIME का उपयोग नहीं कर रहे हैं, या कम से कम जिस तरह से इसका उपयोग करने का इरादा नहीं था। ("डिफुन को फिर से टाइप करना होगा", "सी मॉडल जहां आपके पास कोड फाइलें हैं")

मैं कुछ एसएलईएमई स्क्रीनकास्ट देखने की सलाह देता हूं (या इससे भी बेहतर, कुछ लिस्प प्रोग्रामर SLIME का उपयोग कुछ मिनटों के लिए करते हैं, यदि आपके पास है एक आसान)। SLIME webpage has a couple

+0

धन्यवाद, मुझे निश्चित रूप से लगता है कि एसएलईएमई के बारे में एक ट्यूटोरियल सहायक होगा। – davesw

1

ऐसा लगता है कि आप वास्तव में DrRacket IDE का आनंद लेंगे। Racket सामान्य लिस्प की तुलना में योजना के करीब है, लेकिन आप अपने पैर की अंगुली को एस्क्स शैली के विकास की गति के बिना लिस्प परिवार में डुबो सकते हैं।

+0

यह मेरे लिए दिलचस्प लगता है। मैं इस भाषा/आईडीई पर एक नज़र डालेगा। – davesw

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