¿Cuál es la diferencia entre palabras y símbolos?

7

Al definir una tabla de sintaxis para un modo principal, puedo definir los constituyentes de las palabras y los constituyentes de los símbolos.

¿Cuándo debo usar cada uno? Por ejemplo, dado un lenguaje de programación que escribe variables en caso de serpiente foo_bar, ¿debería _ser parte de una palabra o símbolo?

Wilfred Hughes
fuente
1
El valor predeterminado c-modeque viene con emacs se usa _como un componente de símbolo pero no como un componente de palabra. Así que espero que haya una buena razón para eso. Sin mencionar la gran cantidad de comandos de navegación que funcionarán como se esperaba. Principio de menor sorpresa y todo eso.
Vamsi

Respuestas:

4

Componentes de la palabra: 'w'

Partes de palabras en lenguas humanas. Normalmente se usan en nombres de variables y comandos en programas. Todas las letras mayúsculas y minúsculas, y los dígitos, son típicamente componentes de palabras.

Componentes del símbolo: '_'

Caracteres adicionales utilizados en nombres de variables y comandos junto con componentes de palabras. Los ejemplos incluyen los caracteres '$ & * + -_ <>' en modo Lisp, que pueden ser parte del nombre de un símbolo aunque no sean parte de palabras en inglés. En el estándar C, el único carácter que no es un componente de la palabra que es válido en los símbolos es el subrayado "_".

Cortesía de gnu.org.

¿Cuándo debo usar cada uno? Por ejemplo, dado un lenguaje de programación que escribe variables en el caso de serpiente foo_bar, ¿debería _ ser parte de una palabra o símbolo?

Depende de lo que quieras lograr. Diré, '_' debería ser parte de la palabra. De esa manera, foo_bar será tratado como una palabra.

Eche un vistazo a esa pregunta , hay una respuesta interesante que habla sobre el modo superword y el modo subword

Nsukami _
fuente
2
Dado que el modo c se trata _como un componente de símbolo, ¿por qué sugiere tratarlo como un componente de palabra?
Wilfred Hughes
@WilfredHughes Lo siento, pero aquí nadie hablaba del modo c. Claro, debe tener cuidado con el modo en el que está trabajando. Y como dije en mi respuesta, es solo para el caso que él quiera tratar foo_bar como una palabra. Por favor revise esa pregunta
Nsukami _
66
No utilice la sintaxis de palabras para caracteres como _, ya que eso anula por completo la distinción entre palabras y símbolos. Si te gustan M-f, M-by amigos para moverse por identificadores más que por palabras, entonces en lugar de cambio de la tabla de sintaxis del modo mayor que debe usar superword-mode.
Stefan
55
Al escribir su modo mayor, no haga que los símbolos y las palabras sean lo mismo. Mucha gente usa la distinción, y estarías haciendo su vida más difícil. Las personas a las que no les gusta la distinción ya tienen la opción de superword-mode.
Malabarba
3
@WilfredHughes: de hecho, la definición de palabras casi nunca debería cambiarse.
Stefan
5

Esta respuesta aborda el título de su pregunta: " ¿Cuál es la diferencia entre palabras y símbolos ". No solo se refiere al cuerpo de su pregunta, que trata sobre la sintaxis de los símbolos, que ha sido bien respondida por @Nsukami.

Hay dos significados muy diferentes de la palabra símbolo en Emacs:

  1. sintaxis de símbolos , que involucra caracteres constituyentes de palabras más caracteres constitutivos de símbolos . Esto puede aplicarse a cualquier modo, en particular a cualquier modo / lenguaje de programación. @Nsukami describió este significado bastante bien.

  2. Símbolos Emacs-Lisp . Esta no es una categoría de sintaxis. Un símbolo Lisp es una entidad u objeto Lisp, que tiene ciertas características: un nombre , un plist (lista de propiedades), y potencialmente un valor y una definición de función .

    Por defecto, la celda de valor y la celda de función están vacías, y la lista es la lista vacía ( nil). Funciones Lisp symbol-name, symbol-value, symbol-function, y symbol-plistdevuelven los componentes.

Tenga en cuenta, por cierto, que no se mencionan estas cosas en el manual de Emacs; están cubiertos solo en el manual de Elisp. Y más significativamente, tal vez: no hay una entrada de índice que coincida con " símbolo " para el primer significado (sintaxis). Todas las entradas de índice que incluyen el término " símbolo " se refieren al segundo significado (símbolo Lisp). En particular, no hay ninguna entrada que contenga tanto " símbolo " como " sintaxis ". Si debería haber una entrada de índice, no lo sé (probablemente). Pero esto puede darle una idea de la importancia para Lisp de los símbolos como objetos Lisp .

Para más información, ver:

Dibujó
fuente
muchas gracias por explicar los 2 significados diferentes de la palabra símbolo.
Nsukami _
2

Esto se explica en el manual de ELisp .

Emacs usa terminología de Lisp. Lo que Lisp y Emacs llaman un símbolo es lo que muchos otros lenguajes de programación llaman un identificador *. Ese es el nombre de una variable, función, etc.

Una palabra es una serie de letras o dígitos sin signos de puntuación intermedios.

La mayoría de los lenguajes de programación permiten el _carácter de subrayado en los identificadores, además de letras y dígitos. Algunos idiomas, como Lisp, permiten más. En los lenguajes de programación, los caracteres _que pueden aparecer en los identificadores tienen la clase "constituyente de símbolo" _; las letras y los dígitos tienen la clase "constituyente de la palabra" w.

Los comandos que actúan sobre palabras tratan una secuencia de componentes de palabras como una palabra. Los comandos que actúan sobre expresiones (p forward-sexp. Ej. ) Se mueven por identificadores completos a la vez. El resaltado de sintaxis generalmente trata todos los componentes del símbolo de manera idéntica.

Gilles 'SO- deja de ser malvado'
fuente