投稿

5月, 2017の投稿を表示しています

コンピュータープログラムの計算モデル

命令モデル 命令を実行する。 C言語、Java プログラムの命令を実行すると、内部の状態が変化し(変化させる)、最後の状態が計算結果となる。 計算途中の状態を意識してプログラミングする必要があるが、把握しづらい。状態は変化していくから。 コンピューターのハードウェアの構造に近い計算モデルなので、効率がよい。 関数モデル 関数を呼び出して値を得る。 Lisp、Haskell 命令モデルの言語でも関数式がサポートされるようになった。Javaのλ(ラムダ)式など。 関数を値として扱うことにより、処理を部品化(モジュール化)する。 値を変数にバインド(束縛)し、変化させない。代入や破壊的メソッドの排除。 代入を排除することで、モジュール性が高まり、テストが容易になり、コードの正しさが証明できる。 参照透過性を確保する。数学的な等式が成立する。 A === Aはアドレス参照でなく値を評価する。 関数型プログラミングはメモリやコンパイルの効率的管理が難しかった。 論理モデル 証明を得る。 Prolog 普及している言語は少ない。利用が進んでない。 ポーランド記法を逆ポーランド記法 ポーランド記法 「1 + 2」 ⇒ 3 (1加えることの2ならば3、1プラス2は3) 逆ポーランド記法 「1 2 +」 ⇒ 3 (1に2を足すならば3) 述語関数 ブール値(true/false)を返す関数のこと。 条件を満たせば「真(true)」そうでなければ「偽(false)」を返す。 代数的データ構造 複数の選択肢から一つだけ選択するデータ構造 例、星 恒星 惑星 衛星