Я узнал, что . /path/to/file
в Bash используется для выполнения файла. Просто из любопытства я оценил что-то вроде следующего в Emacs
(. 123)
⇒ 123
(read "(. 123)")
⇒ 123
Похоже , что Emacs просто читает , (. 123)
как то 123
, что произошло?
.
это не функция..
не является переменной Ничего не произошло - почтовый индекс, ноль, пшик, нада.qsdf
это не функция, но(qsdf 123)
даетvoid function...
. И(. 123 456)
выдает синтаксическую ошибку". in wrong context"
..
(или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
. Т.е. описанный тобой эффект очень странный!Ответы:
Именно так и произошло. Чтобы подкрепить это источниками:
Это особый случай для
read_list
вlread.c
. Обычно a.
обрабатывается путем установки cdr ранее прочитанного хвоста следующим образом. Однако в случае, если хвоста нет (как при чтении(. 123)
), следующая вещь читается и возвращается как есть. Лично я ожидал бы, что это приведет к неправильной синтаксической ошибке, но я уверен, что кто-то поместил туда специальный случай, чтобы обойти странно ужасные источники. Я попробовал, как ведут себя другие интерпретаторы Lispcsi
,pil
иsbcl
ничего не делаю , и разрешаю читать это, так что это может стоить сообщения об ошибке.редактировать: Guile ведет себя так же, MIT-схема не. Вот моя теория о том, что это поведение - вещь GNU ...
источник