Dönemin anlamı (. 123)


12

Ben . /path/to/filebash bir dosya yürütmek için kullanılan öğrendim . Sadece meraktan, Emacs'ta aşağıdaki gibi bir şey değerlendiriyorum

(. 123)
     ⇒ 123

(read "(. 123)")
     ⇒ 123

Emacs basitçe okur gibi görünüyor (. 123)olarak 123ne?


.bir işlev değildir. .bir değişken değildir. Hiçbir şey olmadı - zip, sıfır, zilch, nada.
hukukçu

@lawlist Bundan biraz daha karmaşık görünüyor. Örneğin qsdf, aynı zamanda bir işlev değildir, ancak (qsdf 123)sonuç verir void function.... Ve (. 123 456)bir sözdizimi hatası verir ". in wrong context".
T. Verron

1
Bana okuyucuda bir uç davaya benziyor ...
wasamasa

1
Btw, elisp'teki bash'ın .(veya source) eşdeğeri muhtemelen load.
T. Verron

(. 123)üzerinde tutorialspoint.com/execute_lisp_online.php verir *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here. Emacs: (boundp '.)nilve (fboundp '.)nil. Yani, sizin tarif ettiğiniz etki çok garip!
Tobias

Yanıtlar:


15

Görünüşe göre Emacs basitçe 123 olarak okuyor (. 123), ne oldu?

Tam olarak böyle oldu. Kaynaklarla yedeklemek için:

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");
  }

Bu özel bir durumdur read_listiçinde lread.c. Normal olarak a . , önceden okunan kuyruğun cdr'sini aşağıdaki yöntemle ayarlayarak tedavi edilir. Ancak, kuyruk yoksa (okurken olduğu gibi (. 123)), bir sonraki şey olduğu gibi okunur ve geri gönderilir. Şahsen, bunun geçersiz bir sözdizimi hatasına yol açmasını beklerdim, ama eminim birisi garip korkunç kaynaklar etrafında çalışmak için özel bir davaya koydu. Diğer Lisp tercüman eğlenceli ve hiçbiri için nasıl davrandığını ben denedim csi, pilve sbclbu okuma izni yapmak buna değer bir hata raporu olabilir, böylece.

edit: Guile aynı davranır, MIT-Scheme değil. Bu davranışın bir GNU olayı olduğu teorisim var


Guile GNU da değil mi?
T. Verron

Evet, ama bu günlerde MIT-Scheme de öyle.
wasamasa

3
Lütfen bir Emacs hatası bildirmeyi düşünün. Bu "normal" Lisp davranışı değildir. Dahası, belgesiz davranış gibi görünüyor.
Drew

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.