pcase, гибрид cond и cl-case (см. Условные операторы в Common Lisp Extensions), который преодолевает их ограничения и вводит стиль программирования сопоставления шаблонов.
Ограничения, которые преодолевает pcase, следующие:
cond выбирает из альтернатив, вычисляя предикат condition каждой из своих частей (см. Условные операторы). Основное ограничение заключается в том, что переменные, привязанные с помощью let в condition, недоступны для body-forms части.
Другое неудобство (скорее неудобство, чем ограничение) заключается в том, что при использовании серии предикатов condition для проверки равенства возникает много повторяющегося кода. (cl-case решает эту проблему.)
cl-case выбирает из альтернатив, вычисляя равенство своего первого аргумента набору конкретных значений.
Его ограничения двояки:
eql.
Это делает cl-case непригодным для строк или составных структур данных (например, списков или векторов). (cond не имеет этих ограничений, но у него есть и другие, см. выше.)
По своей концепции макрос pcase заимствует фокус на первом аргументе у cl-case и поток обработки частей у cond, заменяя condition обобщением проверки равенства, которое является вариантом сопоставления шаблонов, и добавляя возможности для краткого выражения предиката части и организации совместного использования привязок
Краткое выражение предиката называется шаблоном. Когда предикат, вызванный со значением первого аргумента, возвращает не-nil, мы говорим, что «шаблон соответствует значению» (или иногда «значение соответствует шаблону»).