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 Определение новых типов шаблонов.
• Шаблоны в стиле backquote Структурное сопоставление шаблонов.
• Распаковка с шаблонами pcase Использование шаблонов pcase для извлечения подполей.

Copyright © 1990-1996, 1998-2022 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