两个数字的乘法可以在算法上定义如下:“将第一个数字添加到自身的次数等于第二个数字的值”。两个数字的幂运算可以在算法上定义如下:“将第一个数字乘以自身的次数等于第二个数字的值”。考虑乘法和求幂的这些定义会引发一些问题......
首先,能否以加法为基本运算来定义一类算术运算?我写了一些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]。