2011-03-16 21 views
12

Aquí es un poco de mana que estoy creando, pero ...lo que hace el punto en los siguientes comando emacs significa

No estoy seguro de lo que el punto '' entre la extensión y el modo es para aunque en los siguientes:


Asociaciones de archivos

Ejemplo: Asociado *.mmd con markdown-mode:

 (setq auto-mode-alist (cons '("\\.mmd$" . markdown-mode) auto-mode-alist)) 

básicamente no es una alista (asociativo list/hashtable) llamado auto-mode-alist. Eso apunta a la extensión -> al modo. La extensión se ve como si fuera una expresión regular.

cons es una función que pre-pende un elemento a una lista

setq significa conjunto citado (que cita auto-mode-lista para ti), de lo contrario en lugar de asignar al símbolo de auto-mode-alist , asignará al los resultados de la evaluación de ese símbolo ... no lo que quiere;)

Respuesta

10

Las listas se crean a partir de piezas más pequeñas en Lisp. La notación de puntos indica esas piezas más pequeñas.

(a b c d e)      ; a normal list 
(a . (b . (c . (d . (e . nil))))) ; the same list in primitive form 

Un artículo de la forma (a . b) sintaxis que se llama un contras celular; a es el coche y b es el cdr. (Estos últimos términos provienen de los nombres de registro utilizados para almacenarlos en el miniordenador en el que Lisp fue desarrollado originalmente, y no tienen ningún significado. cons es la abreviatura de "construir"). se crean con la función cons . Observe que el comportamiento de anteponiendo a una lista cae naturalmente del formato interno de una lista, como se muestra arriba, y que añadiendo a una lista con cons no va a hacer lo que uno podría esperar ingenuamente.

Alist s son por convención histórica de civil contras de células s en lugar de listas completas, originalmente para la velocidad.

+1

** ** Alist: s están a desinged mapear un tipo de elemento a otro. No son un artefacto histórico, y no tienen nada que ver con la velocidad. – Lindydancer

+3

@Lindydancer: Sí, pero las alistas funcionarían igual de bien con listas adecuadas en lugar de pares punteados, porque el auto de una lista seguiría siendo la clave de la asociación. Por lo tanto, se podría decir que los pares de puntos para alistas se denominan una optimización para ahorrar el espacio de un cero adicional para finalizar la lista y el tiempo de acceso al valor con cadr en lugar de cdr. –

+0

Para llamarlo una optimización, primero debe comenzar con algo que normalmente se ha utilizado. Una lista que contiene listas de dos elementos no entra en esa categoría, lo siento. – Lindydancer

10

Es la notación de par de puntos. Ver this link para más referencia.

10

en Lisp, en el nivel bajo, puede tener un valor sencillo (un número o un átomo) o un par de puntos , o cons cells. (Vamos a ignorar cosas modernas como vectores ...). Además de esto, se construyen estructuras de datos como listas (a b c).

Un alist o lista asociativa, es una lista llanura donde cada elemento en sí (a, b et.c.) es un par de puntos.Por ejemplo:

((foo . 10) (bar . 20)) 

Puede buscar una alista usando assq o assoc, se devuelve un par. Puede aplicar car y cdr para obtener la parte izquierda o derecha del par, respectivamente.

Una lista simple se construye anticipa al anterior para que (a b c) se representa como (a . (b . (c . nil))) Por lo general, uno no tiene que saber esto para entender a-lista: s, pero el mecanismo de impresión interna a veces puede ser expulsado de. Concretamente, ((foo . nil) (bar . 20)) se imprime típicamente como ((foo) (bar . 20)).

1

This es también una descripción agradable, la esencia:

una lista de puntos es aquel cuya últimos contras no tiene un cero en el caso de su CDR, en vez algún otro objeto de datos (que tampoco es una contras, o los primeros contras no serían los últimos contras de la lista).

Esto permite, por ejemplo, para especificar una lista cuyos contras última es un símbolo, y este símbolo se puede señalar a otra lista, el cambio en tiempo de ejecución, etc.

Cuestiones relacionadas