Основы функционального программирования/Конструирование функций: различия между версиями

Содержимое удалено Содержимое добавлено
мНет описания правки
м Роман! В статье нужно проверить математические символы. У меня всё в квадратиках.
Строка 1:
<div style="float:right;margin:1em;">{{ОФП Содержание}}</div>
__TOC__
{{ОФП Содержание}}
 
Для конструирования функций используются различныеразные формализмы, одним изсреди которых является синтаксически-ориентированное конструирование. Чтобы применять последнюю методикуего, можно воспользоваться методом, который в свое время предложилпредложенным ХоарХоаром. Ниже приводится описание метаязыка, используемого для определения структур данных (в абстрактном синтаксисе):
Ниже приводится описание метаязыка, используемого для определения структур данных (в абстрактном синтаксисе):
 
===Декартово произведение===
1. Декартово произведение: Если C1<math>C_1, ..., CnC_n</math> — этосуть типы, а <math>C</math> это тип, состоящий из множества <math>n</math>-ок вида <c1, ..., cn>, ci  Ci, i = 1,n, то говорится, что C — декартово произведение типов C1, ..., Cn и обозначается как C = C1  ...  Cn. При этом предполагается, что определены селекторы s1, ..., sn для типа C, что записывается как s1, ..., sn = selectors C.
 
Таким же образом записывается конструктор g: g = constructor C. Конструктор — это функция, имеющая тип (С1  ... (Cn  C) ... ), т.е. для ci  Ci, i = 1,n : g c1 ... cn = <c1, ..., cn>.
Строка 17:
si (constructor C c1 ... cn) = ci
 
===Размеченное объединение===
2.Размеченное объединение: Если C1, ..., Cn — это типы, а C — это тип, состоящий из объединения типов C1, ..., Cn, при условии выполнения «размеченности», то C называется размеченным объединением типов C1, ..., Cn. Обозначается этот факт как C = C1 + ... + Cn. Условие размеченности обозначает, что если из C взять какой-нибудь элемент ci, то однозначно определяется тип этого элемента Ci. Размеченность можно определить при помощи предикатов P1, ..., Pn таких, что:
 
(x  C) & (x  Ci)  (Pi x = 1) & (j  i : Pj x = 0)