Ich habe . /path/to/file
in Bash gelernt, dass es verwendet wird, um eine Datei auszuführen. Aus reiner Neugier habe ich in Emacs so etwas wie das Folgende bewertet
(. 123)
⇒ 123
(read "(. 123)")
⇒ 123
Es sieht aus wie Emacs liest einfach (. 123)
wie 123
, was passiert ist ?
.
ist keine Funktion..
ist keine Variable. Nichts ist passiert - zip, zero, zilch, nada.qsdf
ist auch keine Funktion, sondern(qsdf 123)
ergibtvoid function...
. Und(. 123 456)
ergibt einen Syntaxfehler". in wrong context"
..
(odersource
) in elisp wahrscheinlichload
.(. 123)
auf tutorialspoint.com/execute_lisp_online.php gibt*** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here
. In Emacs:(boundp '.)
→nil
und(fboundp '.)
→nil
. Dh der von Ihnen beschriebene Effekt ist sehr seltsam!Antworten:
Genau das ist passiert. So sichern Sie es mit Quellen:
Dies ist der Sonderfall für
read_list
inlread.c
. Normalerweise.
wird a behandelt, indem die cdr des zuvor gelesenen Endes wie folgt eingestellt wird. Wenn jedoch kein Schwanz vorhanden ist (wie beim Lesen(. 123)
), wird das nächste gelesen und so zurückgegeben, wie es ist. Persönlich würde ich davon ausgehen, dass dies zu einem ungültigen Syntaxfehler führt, aber ich bin sicher, dass jemand den Sonderfall dort abgelegt hat, um besonders schreckliche Quellen zu umgehen. Ich habe ausprobiert, wie sich andere Lisp-Interpreten zum Spaß verhaltencsi
,pil
undsbcl
erlaube es, dies zu lesen, daher ist es möglicherweise einen Fehlerbericht wert.edit: Guile verhält sich genauso, MIT-Schema nicht. Nach meiner Theorie ist dieses Verhalten eine GNU-Sache ...
quelle