2013-08-05 153 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