2013-08-05 151 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? 

這意味着乘法當n等於2,意味着冪n = 3時... ?

另外,如何推廣這些算術函數,以便它們可以對所有實數進行操作?畢竟,'複製'的類型是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 completenessBrainf*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