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

Содержимое удалено Содержимое добавлено
Строка 85:
=== Охрана ===
 
При написании функций в абстрактной нотации допустимо использовать так называемую охрану, т.&nbsp;е. ограничения на значения переменных образца. Например, при использовании охраны функция Length<math>length</math> будет выглядеть примерно следующим образом:
 
Length <math>length(L) = 0 \mathbf{when} L == []</math>
Length (L) = 1 + Length (tail (L)) otherwise
 
Length <math>length(L) = 1 + Length length(tail (L)) \mathbf{otherwise}</math>
В рассмотренном коде слова when (когда) и otherwise (в противном случае) являются зарезервированными словами языка. Однако использование этих слов не является необходимым условием для организации охраны. Охрану можно организовывать различными способами, в том числе и с помощью -исчисления:
 
В рассмотренном коде словаслова́ <math>\mathbf{when}</math> (когда) и <math>\mathbf{otherwise}</math> (в противном случае) являются зарезервированными словами языка. Однако использование этих слов не является необходимым условием для организации охраны. Охрану можно организовывать различными способами, в том числе и с помощью λ-исчисления:
Append = [].(L.L)
 
Append = (H:T).(L.H : Append (T, L))
<math>append = \lambda [].(\lambda L.L)</math>
 
<math>append = \lambda (h:t).(\lambda L.h:append(t, L))</math>
 
Представленная запись не очень читабельна, поэтому использоваться она будет только в крайних случаях по необходимости.