Руководства, Инструкции, Бланки

сопоставление с образцом img-1

сопоставление с образцом

Категория: Бланки/Образцы

Описание

Василиса ЯВИКС - интеллектуальная поисковая система

В языках программирования сопоставление с образцом ( англ.   Pattern matching ) — метод анализа и обработки структур данных, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.

Как правило, имеется возможность указать более одного образца и связанного с ним действия.

Сопоставление с образцом часто встречается в функциональных языках программирования. таких как языки семейства ML и Haskell. Императивные языки иногда тоже умеют сопоставлять с образцом. А регулярные выражения для символов, являясь случаем соспоставления с образцом, поддержаны везде.

Сравнение с точным значением

Простейшим вариантом является сопоставление с константой. В этом случае сопоставление с образцом эквивалентно условному оператору или конструкции «switch» («case») в императивных языках.

Здесь следующие за символом "|" значения являются образцами, а следующие за «->» выражения вычисляются при совпадении аргумента «x» с одним из образцов.

Тот же пример с использованием условного оператора :

Использование внутренней структуры объекта

Нахождение суммы списка:

В этом примере аргумент функции «sum» сопоставляется со значением «пустой список», либо с образцом «голова . хвост» (где «::» — оператор добавления элемента в начало списка).

Алгебраические типы данных

В качестве образца может применяться конструктор типов :

Сопоставление со строкой

Языки с развитой поддержкой обработки текста, такие как AWK и SNOBOL. поддерживают сопоставление с регулярным выражением .

Пример на AWK, подсчет количества включений слов «foo» или «bar»:

Другие статьи

Сопоставление с образцом - это

Сопоставление с образцом это: Смотреть что такое "Сопоставление с образцом" в других словарях:

сопоставление с образцом — palyginimas su pavyzdziu statusas T sritis automatika atitikmenys: angl. pattern matching vok. Vergleich mit dem Muster, m rus. сопоставление с образцом, n; сравнение с эталоном, n pranc. concordance par exemple, f … Automatikos terminu zodynas

С++ — См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в: 1985 г. Автор(ы): Бьёрн Страуструп … Википедия

сравнение с эталоном — palyginimas su pavyzdziu statusas T sritis automatika atitikmenys: angl. pattern matching vok. Vergleich mit dem Muster, m rus. сопоставление с образцом, n; сравнение с эталоном, n pranc. concordance par exemple, f … Automatikos terminu zodynas

Пушкин А. С. — Пушкин А. С. Пушкин. Пушкин в истории русской литературы. Пушкиноведение. Библиография. ПУШКИН Александр Сергеевич (1799 1837) величайший русский поэт. Р. 6 июня (по ст. стилю 26 мая) 1799. Семья П. происходила из постепенно обедневшего старого… … Литературная энциклопедия

Pattern matching — Сопоставление с образцом, отождествление … Краткий толковый словарь по полиграфии

Nemerle — Семантика: мультипарадигменный, объектно ориентированный, функциональный, императивный Тип исполнения: компилируемый Появился в: 0.9.3 16 мая … Википедия

Алгоритм Rete — Rete[1]  эффективный алгоритм сопоставления с образцом для продукционных систем, экспертных систем и баз знаний, созданный Чарльзом Форги из Университета Карнеги Меллона. Впервые был описан в рабочем документе 1974 года, затем в докторской… … Википедия

Сравнение языков программирования — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей.  Условные обозначения  … Википедия

Scala (язык программирования) — У этого термина существуют и другие значения, см. Scala. Scala Класс языка: Мультипарадигмальный: функ … Википедия

Macsyma — Эта статья содержит незавершённый перевод с английского языка. Вы можете помочь проекту, переведя её до конца. Macsyma система компьютерной алгебры, первая версия ко … Википедия

  • Семь языков за семь недель. Практическое руководство по изучению языков программирования. Тейт Брюс А. Вместе с семью языками программирования вы исследуете наиболее важные из современных моделей программирования. Вы познакомитесь с динамической типизацией, которая делает языки Ruby, Python и… Подробнее Купить за 1078 руб
  • Семь языков за семь недель. Практическое руководство по изучению языков программирования. Тeйт Б. Вместе с семью языками программирования вы исследуете наиболее важные из современных моделей программирования. Вы познакомитесь с динамической типизацией, которая делает языки Ruby, Python и… Подробнее Купить за 805 руб
  • Семь языков за семь недель. Практическое руководство по изучению языков программирования. Тейт Брюс. Вместе с семью языками программирования вы исследуете наиболее важные из современных моделей программирования. Вы познакомитесь с динамической типизацией, которая делает языки Ruby, Python и… Подробнее Купить за 804 руб
Другие книги по запросу «Сопоставление с образцом» >>

Сопоставление с образцом

Сопоставление с образцом

В языках программирования сопоставление с образцом (англ.   Pattern matching ) — метод анализа и обработки структур данных, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.

Как правило, имеется возможность указать более одного образца и связанного с ним действия.

Сопоставление с образцом часто встречается в функциональных языках программирования. таких как языки семейства ML и Haskell. Императивные языки иногда тоже умеют сопоставлять с образцом. А регулярные выражения для символов, являясь случаем соспоставления с образцом, поддержаны везде.

Содержание Сравнение с точным значением [ править ]

Простейшим вариантом является сопоставление с константой. В этом случае сопоставление с образцом эквивалентно условному оператору или конструкции «switch» («case») в императивных языках.

Рассмотрим, для примера, вычисление логического отрицания.

В Ocaml. <source lang="ocaml"> let neg x =

</source> Здесь следующие за символом "|" значения являются образцами, а следующие за «->» выражения вычисляются при совпадении аргумента «x» с одним из образцов.

Тот же пример с использованием условного оператора. <source lang="ocaml"> let neg x =

Использование внутренней структуры объекта [ править ]

Нахождение суммы списка: <source lang="ocaml"> let rec sum l =

</source> В этом примере аргумент функции «sum» сопоставляется со значением «пустой список», либо с образцом «голова . хвост» (где «::» — оператор добавления элемента в начало списка).

Алгебраические типы данных [ править ]

В качестве образца может применяться конструктор типов.

<source lang="ocaml"> type animal = Dog of string | Cat of string ;;

Сопоставление со строкой [ править ]

Языки с развитой поддержкой обработки текста, такие как AWK и SNOBOL. поддерживают сопоставление с регулярным выражением.

Пример на AWK, подсчет количества включений слов «foo» или «bar»: <source lang="awk"> /foo|bar/ < foobar++ >

См. также [ править ]

О python, it, виртуализации и Co: Сопоставление объектов с образцом (pattern matching)

В функциональных языках есть интересная возможность, фактически являющаяся расширением идеи перегрузки функций - сопоставление с образцом. Для этого поддерживается специальный синтаксис шаблонов структур данных, позволяющий проверить что объект имеет определенный тип и/или поля, а также извлечь из него некоторые данные. Пример из haskell (частично взято тут wiki ):

Примерно тоже можно сделать во многих функциональных языках, но я никогда не видел подобных возможностей в императивных языках. Самое близкое что есть по интеллектуальности - перегрузка функций в C++. Такое положение связанно и с особенностями задач, обычно решаемыми в функциональных языках, и с их ориентированностью на рекурсивные структуры данных и с попытками уйти от if и других императивных особенностей.

Но тем не менее желание сделать что-то подобное для python возникало после каждого ковыряния в функциональщине и после каждой конструкции вида:

А тут что-то захотелось посмотреть внимательно на модуль ast (abstract syntax tree ) - давно не использовал его, последний раз еще во времена 2.4 - тогда очень жалел, что он не позволяет компилировать измененный ast (кстати делал интересный проект по портированию большого куска кода с PyQt3 на PyQt4 и ast позволил значительно автоматизировать этот перенос).

ast позволяет получить из python кода его результат после синтаксического разбора, но еще до компиляции в байтокод, исследовать его и/или изменять и компилировать новый вариант. Пример ast:

Фактически мы получаем исходный текст в удобном для ковыряния виде (правда несколько громоздком). Именно с абстрактными синтаксически деревьями работаю всяческие анализаторы кода, оптимизаторы и прочее. ast предоставляет некоторое количество вспомогательных функций и два класса - NodeVisitor для просмотра ast и NodeTransformer для модификации.

На этом все про ast. Что хотелось от сопоставления с образцом:

  • Чистый python синтаксис, что-бы никаких новых зарезервированных слов и IDE что-бы не ругались
  • Как-можно меньше кода при использовании
  • Обеспечить сопоставление с константой, типом, проверку атрибутов и вложенную проверку

После некоторого времени размышлений остановился на таком варианте:

Как это должно было-бы работать:

Совсем так, как хотелось, сразу не вышло. Вышло так:

Из необязательных ограничений - нужно импортировать модуль python_match без переименования. Обернуть все функции, где используется сопоставление с образцом, декоратором 'python_match.mathing '.

Как это работает:

  • декоратор с помощью модуля inspect получает исходный код функции, разбирает его в ast и прогоняет через класс MatchReplacer
  • MatchReplacer наследует ast.NodeTransformer и перегружает метод visit_With. в котором подменяет ноду with на измененную конструкцию со сравнениями. Строка до >> изменяется на сравнение, а в строка после - подменяются переменные.
  • класс Match делает сопоставление объектов с образцом, если использовалось сравнение атрибутов.

Осталось некоторое количество ограничений, которые однако не принципиальные, так что поскольку задача скорее стояла из разряда - "как бы это сделать" я не стал заниматься дальнейшими оптимизациями/улучшениями.

Исходники этого и других постов со скриптами лежат тут - github.com/koder-ua. При использовании их, пожалуйста, ссылайтесь на koder-ua.blogspot.com .

Gpedia, Your Encyclopedia

Сопоставление с образцом

В языках программирования сопоставление с образцом (англ. Pattern matching ) — метод анализа и обработки структур данных, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.

Как правило, имеется возможность указать более одного образца и связанного с ним действия.

Содержание

Сравнение с точным значением

Простейшим вариантом является сопоставление с константой. В этом случае сопоставление с образцом эквивалентно условному оператору или конструкции «switch» («case») в императивных языках.

Здесь следующие за символом "|" значения являются образцами, а следующие за «->» выражения вычисляются при совпадении аргумента «x» с одним из образцов.

Использование внутренней структуры объекта

Нахождение суммы списка:

В этом примере аргумент функции «sum» сопоставляется со значением «пустой список», либо с образцом «голова. хвост» (где «::» — оператор добавления элемента в начало списка).

Алгебраические типы данных

Сопоставление со строкой

Пример на AWK, подсчет количества включений слов «foo» или «bar»: