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

Содержимое удалено Содержимое добавлено
Строка 190:
 
#Следующие описания реализуют заявленные функции. В некоторых пунктах реализованы дополнительные функции, обойтись без которых представляется сложным.
##<math>ReverseAll</math>:
#*Reverse_all:
Reverse_all ##*<math>ReverseAll(L) = L when atom (L)</math>
Reverse_all##*<math>ReverseAll ([]) = []</math>
Reverse_all ##*<math>ReverseAll(H:T) = Append (Reverse_all ReverseAll(T), Reverse_all ReverseAll(H)) otherwise</math>
#*#<math>Position</math>:
##*<math>Position (A, L) = Position_N (A, L, 0)</math>
##*<math>Position_N (A, [](A:L), N) = 0N + 1</math>
 
##*<math>Position_N (A, (AB:L), N) = Position_N (A, L, N + 1)</math>
##*<math>Position_N (A, (B:L)[], N) = Position_N (A, L, N + 1)0</math>
##<math>Set</math>:
Position_N (A, [], N) = 0
##*<math>Set ([]) = []</math>
#*Set:
##*<math>Set (H:T) = Include (H, Set (T))</math>
Set ([]) = []
##*<math>Include (A, A:L[]) = [A:L]</math>
Set (H:T) = Include (H, Set (T))
##*<math>Include(A, A:L) = A:L</math>
 
##*<math>Include (A, []B:L) = [prefix(B, Include(A], L))</math>
#*#<math>Frequency</math>:
Include (A, A:L) = A:L
##*<math>Frequency (L) = F ([], L)</math>
Include (A, B:L) = prefix (B, Include (A, L))
##*<math>F (L, []) = L</math>
#*Frequency:
##*<math>F(L, H:T) = F(Corrector(H, L), T)</math>
Frequency L = F ([], L)
##*<math>Corrector (A, []) = [A:1]</math>
 
##*<math>Corrector (A, H(A:N):T) = prefix (H, Corrector (A:N + 1), T))</math>
F (L, []) = L
F ##*<math>Corrector(LA, H:T) = F (Corrector prefix(H, L)Corrector(A, T))</math>
#Для всех функций из '''[[Основы функционального программирования/Структуры данных и базисные операции#Упражнения|упражнения 1]]''' лекции'''[[Основы функционального программирования/Структуры данных и базисные операции|лекции&nbsp;2]]''' можно построить определения с накапливающим параметром. С другой стороны, возможно некоторые из вновь построенных функций не будут оптимизированы.
 
##<math>Power\_A</math>:
Corrector (A, []) = [A:1]
Corrector ##*<math>Power\_A(AX, (A:N):T) = prefixP(X, ((A:N +, 1), T)</math>
##*<math>P (X, 0, A) = A</math>
Corrector (A, H:T) = prefix (H, Corrector (A, T))
##*<math>P (X, N, A) = P (X, N - 1, X * A)</math>
 
##<math>Summ\_T\_A</math>:
#Для всех функций из упражнения 1 лекции 2 можно построить определения с накапливающим параметром. С другой стороны, возможно некоторые из вновь построенных функций не будут оптимизированы.
##*<math>Summ\_T\_A(N) = ST(N, 0)</math>
 
##*<math>ST(0, A) = A</math>
#*Power_A:
Power_A ##*<math>ST(XN, NA) = P ST(XN - 1, N, 1+ A)</math>
##<math>Summ\_P\_A</math>:
 
##*<math>Summ\_P\_A(N) = SP(N, 0)</math>
P (X, 0, A) = A
##*<math>SP (0, A) = A</math>
P (X, N, A) = P (X, N – 1, X * A)
##*<math>SP (N, A) = SP (N - 1, Summ_T_A Summ\_T\_A(N) + A)</math>
#*Summ_T_A:
##<math>Summ\_Power\_A</math>:
Summ_T_A (N) = ST (N, 0)
Summ_Power_A ##*<math>Summ\_Power\_A(N, P) = SPA (N, P, 0)</math>
 
ST ##*<math>SPA(N, 0, A) = A</math>
ST ##*<math>SPA(N, P, A) = ST SPA(N, P - 1, (1 / Power\_A(N, P)) + A)</math>
##<math>Exponent\_A</math>:
#*Summ_P_A:
Summ_P_A ##*<math>Exponent\_A(N, P) = SP E(N, P, 0)</math>
##*<math>E (N, 0, A) = A</math>
 
##*<math>E (N, P - 1, (Power_A Power\_A(N, P) / Factorial_A Factorial\_A(P)) + A)</math>
SP (0, A) = A
SP (N, A) = SP (N – 1, Summ_T_A (N) + A)
#*Summ_Power_A:
Summ_Power_A (N, P) = SPA (N, P, 0)
 
SPA (N, 0, A) = A
SPA (N, P, A) = SPA (N, P – 1, (1 / Power_A (N, P)) + A)
#*Exponent_A:
Exponent_A (N, P) = E (N, P, 0)
 
E (N, 0, A) = A
E (N, P – 1, (Power_A (N, P) / Factorial_A (P)) + A)