Умножение двух чисел может быть определено алгоритмически так: «добавьте первое число к себе в несколько раз, равное значению второго числа». Экспоненциация двух чисел может быть алгоритмически определена следующим образом: «умножить первое число само по себе в несколько раз, равное значению второго числа». Думая об этих определениях для умножения и возведения в степень, возникает несколько вопросов ...Обобщающие арифметические операторы
Во-первых, можно ли определить класс арифметических операций, начиная с добавления в качестве фундаментальной операции? Я написал некоторый Haskell код, чтобы проверить эту идею:
order1 x y = x + y
order2 x y = foldl (order1) x (replicate (y - 1) x)
order3 x y = foldl (order2) x (replicate (y - 1) x)
order4 x y = foldl (order3) x (replicate (y - 1) x)
order5 x y = foldl (order4) x (replicate (y - 1) x)
Конечно, смысл «order2» есть умножение и значение «order3» является экспоненцированием. На английском языке, насколько мне известно, не хватает слов для «orderN», где N> 3. Есть ли в математическом сообществе что-нибудь интересное об этих операциях?
Кроме того, учитывая рекурсивное появление этих функций «порядка», как может один написать такую функцию:
generalArithmetic :: Int -> Int -> Int -> Int
generalArithmetic n x y = --Comment: what to put here?
, что означает умножение, когда п равно 2, означает возведение в степень, когда п равно 3 ... ?
Кроме того, как можно обобщить эти арифметические функции, чтобы они могли работать на всех действительных числах? Тип «replicate» - это, в конце концов, Int -> a -> [a].
http://en.wikipedia.org/wiki/Tetration –
Общее выражение [гипероператор ] (http://en.wikipedia.org/wiki/Hyperoperation). – leftaroundabout
Умножение/экспоненциальность ** натуральных ** чисел можно определить как повторные применения операции «нижнего порядка». Труднее сказать, что значит интерпретировать «x^-7.6» как «умножить x сам по себе - 7,6 раза». – Ben