में अवधि का अर्थ (123)


12

मैंने सीखा है . /path/to/fileकि bash किसी फाइल को निष्पादित करने के लिए उपयोग किया जाता है। जिज्ञासा से बाहर, मैं Emacs में निम्नलिखित की तरह कुछ eval

(. 123)
     ⇒ 123

(read "(. 123)")
     ⇒ 123

ऐसा लगता है कि Emacs बस के (. 123)रूप में पढ़ता है 123, क्या हुआ?


.कोई फ़ंक्शन नहीं है। .एक चर नहीं है। कुछ भी नहीं हुआ - ज़िप, शून्य, ज़िल्च, नाडा।
कानून

@lawlist इससे थोड़ा अधिक जटिल प्रतीत होता है। ईजी qsdfएक फ़ंक्शन भी नहीं है, लेकिन (qsdf 123)पैदावार है void function...। और (. 123 456)एक सिंटैक्स त्रुटि देता है ". in wrong context"
टी। वेरॉन

1
मेरे लिए पाठक में एक किनारे के मामले की तरह दिखता है ...
वासमासा

1
Btw, bash के .(या source) elisp में बराबर है load
टी। वेरॉन

(. 123)tutorialspoint.com/execute_lisp_online.php पर देता है *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here। Emacs में: (boundp '.)nilऔर (fboundp '.)nil। यानी, आपके द्वारा वर्णित प्रभाव बहुत अजीब है!
टोबियास

जवाबों:


15

ऐसा लगता है कि Emacs बस (123) को 123 के रूप में पढ़ता है, क्या हुआ?

ठीक ऐसा ही हुआ। सूत्रों के साथ इसका बैकअप लेने के लिए:

if (ch == '.')
  {
    if (!NILP (tail))
      XSETCDR (tail, read0 (readcharfun));
    else
      val = read0 (readcharfun);
    read1 (readcharfun, &ch, 0);

    if (ch == ')')
      {
        if (doc_reference == 1)
          return make_number (0);
        if (doc_reference == 2 && INTEGERP (XCDR (val)))
          /* ... */
        return val;
      }
    invalid_syntax (". in wrong context");
  }

इसमें विशेष मामला read_listहै lread.c। आम तौर पर . जो कुछ भी होता है, उसके द्वारा पहले पढ़ी गई पूंछ की सीडीआर सेट करके इलाज किया जाता है। हालाँकि मामले में कोई पूँछ नहीं है (जैसे कि पढ़ते समय (. 123)), अगली चीज़ पढ़ी जाती है और वापस आती है। व्यक्तिगत रूप से, मुझे उम्मीद है कि एक अवैध सिंटैक्स त्रुटि के लिए नेतृत्व करने के लिए, लेकिन मुझे यकीन है कि किसी ने विशेष मामले को अजीबोगरीब स्रोतों के आसपास काम करने के लिए रखा है। मैंने कोशिश की है कि अन्य लिस्प दुभाषियों को कैसे मज़ेदार और कोई भी व्यवहार नहीं करना चाहिए csi, pilऔर sbclइसे पढ़ने की अनुमति दें, इसलिए यह एक बग रिपोर्ट के लायक हो सकता है।

संपादित करें: Guile एक ही व्यवहार करता है, MIT-Scheme नहीं करता है। इस व्यवहार का मेरा सिद्धांत एक GNU बात है ...


क्या ग्नू ग्नू भी नहीं है?
टी। वेरॉन

हां, लेकिन इन दिनों एमआईटी-स्कीम है।
वामासा

3
कृपया Emacs बग की रिपोर्टिंग पर विचार करें। यह "सामान्य" लिस्प व्यवहार नहीं है। क्या अधिक है, यह अनिर्दिष्ट व्यवहार प्रतीत होता है।
आकर्षित किया

मैंने बग # 24875 में इसकी सूचना दी ।
xununyang
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.