.não é uma função. .não é uma variável Nada aconteceu - zip, zero, zilch, nada.
lawlist
@lawlist Parece ser um pouco mais complicado que isso. Por exemplo, qsdftambém não é uma função, mas (qsdf 123)produz void function.... E (. 123 456)gera um erro de sintaxe ". in wrong context".
44230 T. Verron
1
Parece um caso extremo em que o leitor me ...
wasamasa
1
Btw, provavelmente o equivalente de bash .(ou source) no elisp load.
precisa
(. 123)em tutorialspoint.com/execute_lisp_online.php fornece *** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here. No emacs: (boundp '.)→ nile (fboundp '.)→ nil. Ou seja, o efeito descrito por você é muito estranho!
Tobias
Respostas:
15
Parece que o Emacs simplesmente lê (. 123) como 123, o que aconteceu?
Foi exatamente o que aconteceu. Para fazer backup com fontes:
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");
}
Este é o caso especial de read_listin lread.c. Normalmente a .
é tratado definindo o cdr da cauda lida anteriormente pelo que segue. No entanto, no caso de não haver cauda (como na leitura
(. 123)), a próxima coisa é lida e retornada como está. Pessoalmente, eu esperaria que isso levasse a um erro de sintaxe inválido, mas tenho certeza que alguém colocou o caso especial lá para solucionar fontes particularmente terríveis. Eu tentei como outros intérpretes do Lisp se comportam por diversão e nada disso csi, pile sbclpermitem ler isso, então pode valer a pena um relatório de erro.
edit: Guile se comporta da mesma forma, o MIT-Scheme não. Lá se vai minha teoria de que esse comportamento é uma coisa do GNU ...
.
não é uma função..
não é uma variável Nada aconteceu - zip, zero, zilch, nada.qsdf
também não é uma função, mas(qsdf 123)
produzvoid function...
. E(. 123 456)
gera um erro de sintaxe". in wrong context"
..
(ousource
) no elispload
.(. 123)
em tutorialspoint.com/execute_lisp_online.php fornece*** - READ from #<INPUT BUFFERED FILE-STREAM CHARACTER #P"main.lisp" @1>: token "." not allowed here
. No emacs:(boundp '.)
→nil
e(fboundp '.)
→nil
. Ou seja, o efeito descrito por você é muito estranho!Respostas:
Foi exatamente o que aconteceu. Para fazer backup com fontes:
Este é o caso especial de
read_list
inlread.c
. Normalmente a.
é tratado definindo o cdr da cauda lida anteriormente pelo que segue. No entanto, no caso de não haver cauda (como na leitura(. 123)
), a próxima coisa é lida e retornada como está. Pessoalmente, eu esperaria que isso levasse a um erro de sintaxe inválido, mas tenho certeza que alguém colocou o caso especial lá para solucionar fontes particularmente terríveis. Eu tentei como outros intérpretes do Lisp se comportam por diversão e nada dissocsi
,pil
esbcl
permitem ler isso, então pode valer a pena um relatório de erro.edit: Guile se comporta da mesma forma, o MIT-Scheme não. Lá se vai minha teoria de que esse comportamento é uma coisa do GNU ...
fonte