5

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] です。

4

2 に答える 2

4

はい。最初のオーダー (インクリメント) としてペアノ算術から始めることができます。

Brainf*ckには、インクリメント、デクリメント、およびゼロ以外の値のチェックのみがあります。これを使用しても、常に十分なメモリがあり、答えを得ることを急いでいない限り、他のコンピュータープログラムが実行できる計算を実行できます。

そのような性質はチューリング完全性と呼ばれBrainf*ck、入力と出力がなくてもそうです。したがって<>+-[、および]を使用すると、他のプログラミング言語で解けるすべての数学の問題を解くプログラムを作成できます。

これまでに、足し算、引き算、平均、掛け算、割り算、モジュラス、平方根を行うプログラムを作成しました。

于 2013-08-06T00:53:56.930 に答える
2

私が以前に「generalArithmetic」と呼んだものの定義を気にする人がいる場合は、次のとおりです。

arithmetic n x y = if n == 0
                   then (x + y)
                   else foldl (arithmetic (n - 1)) x (replicate (y - 1) x)
于 2013-08-06T02:09:32.170 に答える