2 つの数値の乗算は、次のようにアルゴリズム的に定義できます。2 つの数値のべき乗は、次のようにアルゴリズム的に定義できます。乗算と累乗の定義について考えると、いくつかの疑問が生じます...
まず、算術演算のクラスは、基本演算として加算から始めることによって定義できますか? そのアイデアをテストするために、いくつかの 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」の意味はべき乗です。私の知る限り、英語には、N > 3 の場合の「orderN」を表す単語がありません。数学コミュニティは、これらの操作について何か興味深いことを言っていますか?
また、これらの「順序」関数の再帰的な外観を考えると、次のような関数をどのように書くのでしょうか:
generalArithmetic :: Int -> Int -> Int -> Int
generalArithmetic n x y = --Comment: what to put here?
これは、n が 2 の場合は乗算を意味し、n が 3 の場合は累乗を意味します ...?
また、これらの算術関数を一般化して、すべての実数を操作できるようにするにはどうすればよいでしょうか? レプリケートの型は、やはり Int → a → [a] です。