Saya pelajari . /path/to/file
di bash digunakan untuk mengeksekusi file. Hanya karena penasaran, saya eval sesuatu seperti yang berikut ini di Emacs
(. 123)
⇒ 123
(read "(. 123)")
⇒ 123
Sepertinya Emacs hanya dibaca (. 123)
sebagai 123
, apa yang terjadi?
.
bukan fungsi..
bukan variabel. Tidak ada yang terjadi - zip, nol, zilch, nada.qsdf
bukan fungsi juga, tetapi(qsdf 123)
menghasilkanvoid function...
. Dan(. 123 456)
menghasilkan kesalahan sintaksis". in wrong context"
..
(atausource
) di elispload
.(. 123)
di tutorialspoint.com/execute_lisp_online.php berikan*** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here
. Dalam emacs:(boundp '.)
→nil
dan(fboundp '.)
→nil
. Yaitu, efek yang dijelaskan oleh Anda sangat aneh!Jawaban:
Itulah tepatnya yang terjadi. Untuk mencadangkannya dengan sumber:
Ini adalah kasus khusus untuk
read_list
dilread.c
. Biasanya a.
diperlakukan dengan mengatur cdr dari bacaan yang sebelumnya dibaca oleh apa pun yang berikut. Namun dalam kasus tidak ada ekor (seperti saat membaca(. 123)
), hal berikutnya dibaca dan dikembalikan apa adanya. Secara pribadi, saya berharap itu mengarah pada kesalahan sintaksis yang tidak valid, tapi saya yakin seseorang meletakkan case khusus di sana untuk bekerja di sekitar sumber yang sangat mengerikan. Saya sudah mencoba bagaimana interpreter Lisp lain berperilaku untuk bersenang-senang dan tidak adacsi
,pil
dansbcl
memang mengizinkan membaca ini, sehingga mungkin layak laporan bug.sunting: Tipu muslihat sama, MIT-Skema tidak. Sudah ada teori saya tentang perilaku ini menjadi hal GNU ...
sumber