что означает точка в следующей команде emacs - PullRequest
14 голосов
/ 16 марта 2011

Вот некоторые документы, которые я создаю, но ...

Я не уверен, что за точка '.' между расширением и режимом хотя в следующем:


Файловые ассоциации

Пример: Связать *.mmd с markdown-mode:

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

в основном существует alist (ассоциативный список / хеш-таблица), называемый auto-mode-alist. Это указывает на расширение -> в режим. Расширение выглядит как будто это регулярное выражение.

cons - это функция, которая предварительно ожидает элемент в списке

setq означает набор в кавычках (который цитирует автоматический режим-список для вас), в противном случае вместо присвоения символу auto-mode-alist, вы будете назначать результаты оценки этого символа ... не то, что вы хотите;)

Ответы [ 4 ]

14 голосов
/ 16 марта 2011

Списки создаются из меньших кусочков в Лиспе. Точечная запись обозначает эти меньшие кусочки.

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

Элемент вида (a . b) синтаксис называется cons cell ; a - это автомобиль , а b - это cdr . (Эти последние термины взяты из имен регистров, используемых для хранения их на миникомпьютере, на котором изначально разрабатывался Lisp, и не имеют иного значения. * s создаются с помощью функции cons. Обратите внимание, что поведение для добавления в список естественным образом выходит за пределы внутреннего формата списка, как показано выше, и что добавление к списку с cons не будет делать то, что можно наивно ожидать.

Alist s по историческому соглашению равняется cons клетка s вместо полных списков, первоначально для скорости.

12 голосов
/ 16 марта 2011

Это обозначение пунктирной пары. См. эту ссылку для дальнейшего использования.

11 голосов
/ 16 марта 2011

В lisp на низком уровне вы можете иметь либо простое значение (число или атом), либо пунктирную пару , либо cons-ячейки . (Давайте игнорировать современные вещи, такие как векторы ...). Вдобавок к этому создаются структуры данных, такие как списки (a b c).

alist или ассоциативный список , представляет собой простой список, в котором каждый элемент (a, b и т. Д.) Является точечной парой. Например:

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

Вы можете выполнить поиск по списку, используя assq или assoc, возвращается пара. Вы можете применить car и cdr, чтобы получить левую или правую часть пары соответственно.

Простой список продуманно построен выше, так что (a b c) представляется как (a . (b . (c . nil))) Как правило, не нужно знать это, чтобы понимать alist: s, но иногда может быть сброшен внутренний механизм печати. Конкретно, ((foo . nil) (bar . 20)) обычно печатается как ((foo) (bar . 20)).

1 голос
/ 26 февраля 2016

Это также хорошее описание, суть:

Пунктирный список - это список, у которого у последних минусов нет ноля для своего CDR ,скорее некоторый другой объект данных (который также не является минусами, или упомянутые вначале минусы не будут последними минусами списка).

Это позволяет, например, указать список, последние минусы которогоявляется символом, и этот символ может указывать на другой список, изменять во время выполнения и т. д.

...