2012-06-10 5 views
4

В Emacs есть команды для перемещения курсора по выражениям, заключенным в круглые скобки (или любые скобки), а именно forward-sexp, backward-sexp, forward-list и backward-list. В Lisp и любом другом коде они ведут себя одинаково, поэтому я не вижу разницы между * -sexp и * -list, за исключением того, что последние не работают внутри комментариев или кавычек.Разница между sexp и списком в Emacs?

Каково функциональное различие между командами sexp и list и когда я должен использовать их?

На всякий случай, я понимаю команды вверх и вниз, они не имеют отношения к теме.

ответ

4

Список является одним из примеров s-выражения, поэтому любая функция, которая работает с s-выражениями, должна работать над списками (но не обязательно наоборот, так как есть также не-list sexps).

Elisp руководство говорит:

шепелявость объект, который предназначен для оценки называется «форма» или «выражение» (1). Тот факт, что формы являются объектами данных, а не только , является одним из фундаментальных различий между Lisp-подобными языками и типичными языками программирования. Любой объект может быть оценен, но в часто используются только цифры, символы, списки и строки очень часто .

---------- ---------- Сноски

(1) Это иногда также упоминается как "S-выражения" или "Sexp", , но мы обычно не используем эту терминологию в этом руководстве.

С-чяг(elisp) Intro EvalRET

4

Не все S-выражения списков, например, переменными являются s-выражения, в то время как они явно не являются списками.

Рассмотрим следующий пример:

foo (bar) 

Если вы поместите курсор в начале строки, forward-sexp переместит точку к концу «Foo», а forward-list переместит точку к концу "(бар)"

Смежные вопросы