[lisp] ¿Por qué Clojure tiene "palabras clave" además de "símbolos"?


1 Answers

Common Lisp tiene símbolos de palabras clave.

Las palabras clave son símbolos, también.

(symbolp ':foo) -> T

Qué hace que las palabras clave sean especiales:

  • : foo es analizado por el lector de Common Lisp como la palabra clave de símbolo :: foo
  • palabras clave evaluar a sí mismos:: foo ->: foo
  • el paquete principal de símbolos de palabras clave es el paquete KEYWORD: palabra clave: foo ->: foo
  • las palabras clave se exportan desde el paquete KEYWORD
  • las palabras clave son constantes, no está permitido asignar un valor diferente

De lo contrario, las palabras clave son símbolos ordinarios. Por lo tanto, las palabras clave pueden nombrar funciones o tener listas de propiedades.

Recuerde: en Common Lisp los símbolos pertenecen a un paquete. Esto se puede escribir como:

  • foo, cuando el símbolo es accesible en el paquete actual
  • foo: bar, cuando el símbolo FOO se exporta desde el paquete BAR
  • foo :: bar, cuando el símbolo FOO está en el paquete BAR

Para los símbolos de palabras clave eso significa que: foo, palabra clave: foo y palabra clave :: foo son todos el mismo símbolo. Por lo tanto, las dos últimas notaciones generalmente no se usan.

Por lo tanto: foo simplemente se analiza para que esté en el paquete KEYWORD, suponiendo que no dar el nombre del paquete antes del nombre del símbolo significa por defecto el paquete KEYWORD.

Question

Tengo un conocimiento pasajero de otros Lisps (especialmente Scheme) desde hace mucho tiempo. Recientemente he estado leyendo sobre Clojure . Veo que tiene tanto "símbolos" como "palabras clave". Símbolos con los que estoy familiarizado, pero no con palabras clave.

¿Tienen otros Lisp palabras clave? ¿En qué se diferencian las palabras clave de los símbolos, además de tener una notación diferente (es decir, dos puntos)?




Para las palabras clave, los valores hash se calculan y almacenan en caché cuando se crea la palabra clave por primera vez. Al buscar una palabra clave como una clave hash, simplemente devuelve el valor hash precalculado. Para cadenas y símbolos, el hash se vuelve a calcular en cada búsqueda.

La razón por la cual las mismas palabras clave siempre son idénticas, contienen sus propios valores hash. Como la búsqueda en mapas y conjuntos se realiza a partir de claves hash, esto implica una mejor eficacia de búsqueda en caso de numerosas búsquedas, no en la búsqueda en sí.




Related