Spec-Zone.ru › Elisp

Условная конструкция с сопоставлением с образцом

Помимо четырёх основных форм условных конструкций, в Emacs Lisp также есть условная конструкция с сопоставлением с образцом — макрос pcase, гибрид cond и cl-case (см. Условные конструкции в Расширениях Common Lisp), который преодолевает их ограничения и вводит стиль программирования с сопоставлением с образцом. Ограничения, которые преодолевает pcase:

  • Форма cond выбирает один из вариантов, вычисляя предикат condition каждого из своих предложений (см. Условные конструкции). Основное ограничение состоит в том, что переменные, связанные с помощью let в condition, недоступны в body-forms предложения.

    Ещё одно неудобство (скорее затруднение, чем ограничение) заключается в том, что при использовании последовательности предикатов condition для проверки на равенство приходится многократно повторять один и тот же код. (cl-case устраняет это неудобство.)

  • Макрос cl-case выбирает один из вариантов, сравнивая первый аргумент на равенство с набором конкретных значений.

    У него два ограничения:

    1. Для проверки на равенство используется eql.
    2. Значения должны быть заранее известны и указаны явно.

    Из-за этого cl-case не подходит для строк или составных структур данных (например, списков или векторов). (У cond этих ограничений нет, но есть другие; см. выше.)

Концептуально макрос pcase заимствует у cl-case фокус на первом аргументе, а у cond — порядок обработки предложений. Он заменяет condition обобщённой проверкой на равенство, представляющей собой вариант сопоставления с образцом, и добавляет средства, позволяющие кратко выражать предикат предложения и совместно использовать let-связывания между предикатом предложения и body-forms.

Краткое выражение предиката называется образцом. Если предикат, применённый к значению первого аргумента, возвращает не-nil, говорят, что «образец соответствует значению» (или иногда «значение соответствует образцу»).

  • Макрос pcase
  • Расширение pcase
  • Образцы в стиле обратной кавычки
  • Деструктуризация с образцами pcase
  • Макрос cond*

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Pattern_002dMatching-Conditional.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API