ความหมายของระยะเวลาใน (. 123)


12

ฉันเรียนรู้. /path/to/fileใน bash ใช้เพื่อเรียกใช้ไฟล์ เพิ่งออกมาจากความอยากรู้อยากเห็นฉันทำอะไรบางอย่างเช่นดังต่อไปนี้ใน Emacs

(. 123)
     ⇒ 123

(read "(. 123)")
     ⇒ 123

ดูเหมือนว่า Emacs เพียงแค่อ่าน(. 123)เป็น123สิ่งที่เกิดขึ้น?


.ไม่ใช่ฟังก์ชั่น .ไม่ใช่ตัวแปร ไม่มีอะไรเกิดขึ้น - zip, zero, zilch, nada
ฏหมาย

@ กฎหมายรายการดูเหมือนว่าจะซับซ้อนกว่านั้นเล็กน้อย เช่นqsdfไม่ได้เป็นฟังก์ชั่นทั้ง แต่อัตราผลตอบแทน(qsdf 123) void function...และอัตราผลตอบแทนไวยากรณ์ผิดพลาด(. 123 456) ". in wrong context"
ต. Verron

1
หน้าตาเหมือนกรณีขอบในการอ่านเพื่อฉัน ...
wasamasa

1
Btw เทียบเท่าของทุบตีของ.(หรือsource) ใน Elisp loadน่าจะเป็น
ต. Verron

(. 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โดยปกติ. จะได้รับการปฏิบัติโดยการตั้งค่า cdr ของหางอ่านก่อนหน้านี้โดยสิ่งต่อไปนี้ อย่างไรก็ตามในกรณีที่ไม่มีหาง (เช่นเมื่ออ่าน (. 123)) สิ่งต่อไปจะถูกอ่านและส่งคืนตามที่เป็นอยู่ โดยส่วนตัวฉันคาดหวังว่าจะนำไปสู่ข้อผิดพลาดทางไวยากรณ์ที่ไม่ถูกต้อง แต่ฉันแน่ใจว่ามีคนใส่เคสพิเศษไว้ที่นั่นเพื่อทำงานกับแหล่งที่น่ากลัวโดยเฉพาะ ฉันลองใช้ล่าม Lisp คนอื่น ๆ เพื่อความสนุกสนานและไม่เป็นcsiเช่นนั้นpilและsbclอนุญาตให้อ่านข้อความนี้ได้ดังนั้นจึงอาจคุ้มค่ากับรายงานข้อผิดพลาด

แก้ไข: Guile ทำตัวเหมือนกัน MIT-Scheme ทำไม่ได้ ทฤษฎีของฉันเกี่ยวกับพฤติกรรมนี้เป็นสิ่งที่ GNU ...


Guile GNU ก็เช่นกันใช่ไหม
T. Verron

ใช่ แต่วันนี้ MIT-Scheme
wasamasa

3
โปรดพิจารณาการรายงานข้อบกพร่องของ Emacs นี่ไม่ใช่พฤติกรรมเสียงกระเพื่อม "ปกติ" ยิ่งไปกว่านั้นดูเหมือนว่าพฤติกรรมที่ไม่มีเอกสาร
Drew

ผมรายงานเรื่องนี้ในข้อผิดพลาด # 24875
xuchunyang
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.