J'ai appris . /path/to/file
en bash est utilisé pour exécuter un fichier. Par curiosité, j'évalue quelque chose comme ce qui suit dans Emacs
(. 123)
⇒ 123
(read "(. 123)")
⇒ 123
Il ressemble à Emacs lit tout simplement (. 123)
que 123
, ce qui est arrivé?
.
n'est pas une fonction..
n'est pas une variable. Rien ne s'est passé - zip, zéro, zilch, nada.qsdf
n'est pas une fonction non plus, mais(qsdf 123)
cèdevoid function...
. Et(. 123 456)
renvoie une erreur de syntaxe". in wrong context"
..
(ousource
) dans elisp est probablementload
.(. 123)
sur tutorialspoint.com/execute_lisp_online.php donne*** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here
. Dans emacs:(boundp '.)
→nil
et(fboundp '.)
→nil
. C'est à dire, l'effet décrit par vous est très étrange!Réponses:
C'est exactement ce qui s'est passé. Pour le sauvegarder avec des sources:
C'est le cas particulier de
read_list
inlread.c
. Normalement, a.
est traité en définissant le cdr de la queue précédemment lue par ce qui suit. Cependant, dans le cas où il n'y a pas de queue (comme lors de la lecture(. 123)
), la prochaine chose est lue et retournée telle quelle. Personnellement, je m'attendrais à ce que cela conduise à une erreur de syntaxe non valide, mais je suis sûr que quelqu'un a mis le cas spécial là pour contourner des sources particulièrement terribles. J'ai essayé comment les autres interprètes Lisp se comportent pour le plaisir et rien de tout celacsi
,pil
etsbcl
j'autorise la lecture de cela, donc cela peut valoir un rapport de bogue.edit: Guile se comporte de la même manière, MIT-Scheme ne fonctionne pas. Il va ma théorie de ce comportement étant une chose GNU ...
la source