タグ付けされた質問 「imperative-programming」

1
チューリング完全性にはdo-whileループで十分ですか?
命令型プログラミング言語では、言語をチューリング完全にするための制御フロー構造としてwhile-doループで十分であることを知っています(制御フローに関する限り-もちろん、無制限のメモリと特定の演算子も必要です...) 。私の質問の要点は、do-whileループはwhile-doループと同じ計算能力を持っていますか?言い換えれば、命令を完全にスキップすることが不可能な場合、言語をチューリング完全にすることができます。 ここでのセマンティクスの一部は少し曖昧かもしれないことを理解しているので、具体的な例で実際の質問を言いましょう。 Brainfuck(BF)は、Turingターピットであり、唯一の制御フローはwhile-doループです[...](Brainfuckに慣れていない場合に備えて、質問の下部に完全な言語仕様があります)。さんはどこ、*新しい言語BFを定義してみましょう,.+-<>BFと同じ意味を持っていますが、代わりに[]私たちが持ってい{}たdo-whileループを示しています。つまり、BFとの唯一の違いは、すべてのループが少なくとも1回実行されてから、さらに反復がスキップされることです。 BF *チューリング完全ですか?もしそうなら、BFをBF *に変換する方法に興味があります。そうでない場合、どうすればそれを証明できますか? 私自身のいくつかの観察: すべてのBFプログラムをBF *に翻訳できるわけではありません。たとえば、BF *で値を読み取ったり印刷したりするプログラムを書くことは不可能です。プログラムが1つ以上の値を印刷する可能性がある場合、常に少なくとも1つを印刷します。ただし、BF *に変換できるBFのチューリング完全サブセットがある場合があります。 [f](最初の反復の効果をキャンセルしようとして)に(最初の反復の効果をキャンセルするために)単純に変換することはできません(a fのみで構成されるBrainfuckプログラム)。すべての計算可能な関数に計算可能な逆関数とb)がある場合でも、ループが必ずしも少ないとは限らないため、このステップを再帰的に適用しても、最初に終了することは保証されません。+-[]<>f-1{f}f-1f Brainfuck言語の簡単な概要を次に示します。Brainfuckは、各セルに最初はゼロのバイト値が含まれる無限テープで動作します。オーバーフローはラップアラウンドするため、255をインクリメントすると0になり、逆も同様です。言語は8つの命令で構成されています。 + Increment the current cell. - Decrement the current cell. > Move tape head to the right. < Move tape head to the left. , Input a character from STDIN into the current cell. . …

2
関数型プログラミングは、変装した命令型プログラミングではありませんか?
私が見ていたYouTubeビデオでは、命令型プログラミングと関数型プログラミングの違いについて、JavaとHaskellでそれぞれ1to からtoまでの数を10合計する方法を説明することで説明しました。 Javaでは、各ステップを明示的に記述し、各ステップの結果を変数に割り当てる必要があります-次のようなもの int total = 0; for (int i = 1; i <= 10; i++){ total = total + i; } return total; Haskellでは、次のように簡単に言うことができます。 sum(1..10) 私の質問は次のとおりです。関数型言語のバックグラウンドで何かが起こっていることは明らかであり、その何かはある種の命令型プロセスでなければなりません。関数型言語は、実際には一種の命令型言語のAPIのようです。たとえばsum(int start, int end)、Javaでメソッドを定義することにより、関数型言語の一部を作成できます。私は本当に新しいタイプの言語をすぐに作成しましたか、それとも命令命令をユーザーから隠す一連の命令メソッド呼び出しを定義しただけですか? 私が理解するのに苦労していることがはっきりしているといいのですが。

2
決定的なforループを使用してフィボナッチ数列のn番目の項を見つけることは可能ですか?
私はJohn Zelle著の本の「Introduction to Computer Science」を使用しており、第3章(数値による計算)の最後に、おそらく決定的なforループを使用しているフィボナッチ数列のn番目の項を見つけるように求められます。構造はまだ導入されています。 これは可能ですか?思いつく限りのことを試しました。 **私はifステートメントなどを使用してそれを解決する方法を知っています。しかし、この本はまだ決定構造をカバーしていませんが、それでも私は(ユーザーから与えられた)n番目の用語を見つけるように求めてきます。これがこれまでカバーしてきたことなので、 "for"ループを使用してこれを行う方法を知っているとしか推測できません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.