2011-03-16 2 views
12

Voici quelques doco je crée, mais ...ce que fait le point dans les emacs commande suivante signifie

Je ne suis pas sûr de ce que le point « » entre l'extension et le mode est pour bien dans les domaines suivants:


Associations de fichiers

Exemple: associé *.mmd avec markdown-mode:

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

fondamentalement, il est un alist (associatif liste/hashtable) appelé auto-mode-alist. Cette extension de points -> en mode. Extension ressemble comme c'est une expression régulière.

cons est une fonction qui pré-Pends un élément à une liste

setq signifie ensemble cité (qui cite le mode auto-liste pour vous), sinon au lieu d'attribuer au symbole auto-mode-alist , vous affecterez à les résultats de l'évaluation de ce symbole ... pas ce que vous voulez;)

Répondre

10

Les listes sont construites à partir de plus petites pièces dans Lisp. La notation par points indique ces petites pièces.

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

Un élément de la forme syntaxe (a . b) est appelé une cellule contre ; a est le voiture et b est le cdr. (Ces derniers termes proviennent des noms de registre utilisés pour les stocker sur le mini-ordinateur Lisp a été développé à l'origine, et ne sont pas significatifs.) par contre est l'abréviation de "construct".) par défaut s sont créés avec la fonction cons . Notez que le comportement pour ajouter une liste à une liste tombe naturellement hors du format interne d'une liste, comme montré ci-dessus, et que ajoutant à une liste avec cons ne fera pas ce que l'on peut s'attendre naïvement.

ALIST s sont par simples convention historique contre cellule s au lieu de listes complètes, à l'origine pour la vitesse.

+1

** Alist **: s sont à desinged cartographier une sorte d'élément à l'autre. Ils ne sont pas un artefact historique, et ils n'ont rien à voir avec la vitesse. – Lindydancer

+3

@Lindydancer: Oui, mais les alistes fonctionneraient aussi bien avec des listes propres que des paires pointées, car la voiture d'une liste serait toujours la clé de l'association. Par conséquent, les paires en pointillés pour les alists peuvent sans doute être appelées une optimisation pour économiser l'espace d'un nil supplémentaire pour terminer la liste et le temps d'accès à la valeur avec cadr au lieu de cdr prendrait. –

+0

Pour l'appeler une optimisation, vous devez commencer par quelque chose qui a généralement été utilisé. Une liste contenant des listes à deux éléments ne tombe pas dans cette catégorie, désolé. – Lindydancer

10

C'est la notation par paire en pointillés. Voir this link pour plus de référence.

10

En Lisp, le bas niveau, vous pouvez avoir une valeur simple (un numéro ou un atome) ou une paire en pointillés ou cellules cons. (Ignorons les trucs modernes comme les vecteurs ...). En outre, des structures de données telles que les listes (a b c) sont construites.

Un alist ou liste associative, est une simple liste où chaque élément lui-même (a, b et.c.) est une paire pointillée.Par exemple:

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

Vous pouvez rechercher un alist en utilisant assq ou assoc, une paire est retournée. Vous pouvez appliquer car et cdr pour obtenir la partie gauche ou droite de la paire, respectivement.

Une simple liste est habilement construit de telle sorte que ce qui précède (a b c) est représentée comme (a . (b . (c . nil))) En règle générale, il ne faut pas savoir ce comprendre alist: s, mais le mécanisme d'impression interne peut parfois se jeter de. Concrètement, ((foo . nil) (bar . 20)) est généralement imprimé comme ((foo) (bar . 20)).

1

This est aussi une belle description, l'essence:

Une liste en pointillés est une dont contre dernière ne dispose pas nul pour son cdr, objet plutôt une autre de données (ce qui est pas un par contre, ou les premiers contre mentionnés ne seraient pas les derniers inconvénients de la liste).

Cela permet par exemple de spécifier une liste dont le dernier contre est un symbole, et ce symbole peut alors pointer vers une autre liste, le changement lors de l'exécution, etc.