2013-08-05 5 views
5

Умножение двух чисел может быть определено алгоритмически так: «добавьте первое число к себе в несколько раз, равное значению второго числа». Экспоненциация двух чисел может быть алгоритмически определена следующим образом: «умножить первое число само по себе в несколько раз, равное значению второго числа». Думая об этих определениях для умножения и возведения в степень, возникает несколько вопросов ...Обобщающие арифметические операторы

Во-первых, можно ли определить класс арифметических операций, начиная с добавления в качестве фундаментальной операции? Я написал некоторый 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].

+2

http://en.wikipedia.org/wiki/Tetration –

+1

Общее выражение [гипероператор ] (http://en.wikipedia.org/wiki/Hyperoperation). – leftaroundabout

+4

Умножение/экспоненциальность ** натуральных ** чисел можно определить как повторные применения операции «нижнего порядка». Труднее сказать, что значит интерпретировать «x^-7.6» как «умножить x сам по себе - 7,6 раза». – Ben

ответ

4

Да. Вы можете начать с арифметики peano в качестве первого порядка (приращение)

Brainf*ck имеет только прирост, декремент и проверку ненулевого значения. Даже при этом он может выполнять любые вычисления, которые может выполнять любая другая компьютерная программа, если у нее всегда достаточно памяти, и вы не спешите получить ответ.

Такое свойство называется Turing completeness и Brainf*ck такое даже без ввода и вывода. Таким образом, с помощью <, >, +, -, [ и ] вы можете создать программу для решения всех математических задач, решаемых другими языками программирования.

До сих пор я делал программы, которые дополняют, вычитают, усредняют, умножают, делят, модуль и квадратный корень.

2

В случае кто-то заботится о определения для того, что я ранее назвал «generalArithmetic», здесь:

arithmetic n x y = if n == 0 
        then (x + y) 
        else foldl (arithmetic (n - 1)) x (replicate (y - 1) x) 
+0

Если бы это было какое-то реальное дело, и вы бы вообще не интересовались эффективностью, вы также хотели бы обрабатывать 'n == 1' и' n == 2' в качестве особых случаев и использовать встроенное умножение и возведение в степень там , – firefrorefiddle

Смежные вопросы