Основы функционального программирования/Структуры данных и базисные операции — 2: различия между версиями

Содержимое удалено Содержимое добавлено
Ещё немного подправлено...
Строка 41:
=== Образцы и клозы ===
 
Необходимо отметить, что в нотации абстрактного функционального языка, который использовался до сих пор для написания примеров функций, можно было бы использовать такую конструкцию, как <math>if-then-else</math>. Например, при описании функции <math>append</math> (см. '''[Основы функционального программирования/Структуры данных и базисные операции#Примеры|пример&nbsp;7]]'''), её тело можно было бы записать следующим образом:
 
<math>append(L_{1}, L_{2}) = if (L_{1} = []) then L_{2} else head(L_{1}) : append(tail(L_{1}), L_{2})</math>
 
Однако данная запись чревата непониманием и трудным разбором. Поэтому даже в '''[Основы функционального программирования/Структуры данных и базисные операции#Примеры|примере&nbsp;7]]''' была использована нотация, которая поддерживает так называемые «образцы».
 
'''Определение:'''
Строка 58:
*<math>[X, Y]</math> — список.
 
К образцам предъявляется одно требование, которое должно выполняться беспрекословно, иначе сопоставление с образцами будет выполнено неверно. Требование это звучит следующим образом: при сопоставлении образца с данными означивание переменных должно происходить единственным образом. Т.&nbsp;е., например, выражение <math>(1 + X \Rightarrow 5)</math> можно использовать как образец, т.&nbsp;к. означивание переменной </math>X</math> происходит единственным образом (<math>X = 4</math>), а выражение <math>(X + Y \Rightarrow 5)</math> использовать в качестве образца нельзя, ибо означить переменные <math>X</math> и <math>Y</math> можно различным образом.
 
Кроме образцов в функциональном программировании вводится такое понятие, как «клоз» (от англ. «clause»). По определению клозы выглядят так: