Mnożenie dwóch liczb można zdefiniować algorytmicznie w następujący sposób: "dodaj pierwszą liczbę do siebie kilka razy równą wartości drugiej liczby". Potęgowanie dwóch liczb może być zdefiniowane algorytmicznie w następujący sposób: "pomnóż pierwszą liczbę samodzielnie liczbę razy równą wartości drugiej liczby". Zastanawianie się nad tymi definicjami dla mnożenia i potęgowania rodzi kilka pytań ...Generalizowanie operatorów arytmetycznych
Po pierwsze, czy można zdefiniować klasę działań arytmetycznych rozpoczynając od dodania jako podstawowej operacji? Pisałem trochę kodu Haskell, aby przetestować ten pomysł:
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)
Rzeczywiście, pojęcie „order2” jest mnożenie i sens „order3” jest potęgowanie. W języku angielskim, o ile mi wiadomo, brakuje słów "orderN", gdzie N> 3. Czy wspólnota matematyczna ma coś ciekawego do powiedzenia na temat tych operacji?
Ponadto, biorąc pod uwagę rekurencyjne wygląd tych funkcji „zamówienie”, jak można napisać funkcję tak:
generalArithmetic :: Int -> Int -> Int -> Int
generalArithmetic n x y = --Comment: what to put here?
że oznacza mnożenie gdy n jest równe 2, gdy n oznacza potęgowanie wynosi 3 ... ?
Również, w jaki sposób można uogólnić te funkcje arytmetyczne, aby mogły działać na wszystkich liczbach rzeczywistych? Typ "replikacji" to przecież Int -> a -> [a].
http://en.wikipedia.org/wiki/Tetration –
ogólny wyraz jest [hyperoperation ] (http://en.wikipedia.org/wiki/Hyperoperation). – leftaroundabout
Mnożenie/potęgowanie ** liczb naturalnych ** można zdefiniować jako powtarzające się zastosowania operacji "niższego rzędu". Trudniej powiedzieć, co to znaczy interpretować "x^-7,6" jako "mnożyć x przez siebie - 7,6 razy". – Ben