📝命令型プログラミング

📝命令型プログラミング

up: 📁Programming Paradigms

命令型プログラミングとは #

Imperative Programming, 命令型プログラミング.

計算をプログラム状態を変化させる文の列で記述するパラダイム.

ref: 命令型プログラミング - Wikipedia

Function paradigm に Cell (状態) の概念を加えたもの.

Imperative programming = Function paradigm + Cell

Declarative Programing の対になる概念. Imperative vs Declaretive is also Stateful vs Stateless.

命令型パラダイムのプログラミング言語 #

  • C 言語
  • アセンブリ言語

関数型プログラミングと命令型プログラミングの違い #

cf. 📝Functional Programming

Function Paradigms と Imperative Paradigm の違いは,

  • Functional
    • 状態変化しない (Immunity)
    • 機能追加時にインタフェースの変更の影響度がおおきい.
  • Inperative
    • 機能追加時にインタフェースの変更の影響度がない. (モジュール性, モジュールプログラミング)
    • 状態変化する.
    • 実行するたびに, 内部の状態によって結果がことなる.(副作用)
    • 械語は命令から構成される

低レベルから見た場合, プログラムの状態はメモリの内容によって定義され, 文としては機械語の命令が相当する.

Explicite State #

明示的状態.

  • 生存期間が 2 度以上の手続的呼び出しに渡るような一つの状態.
  • 関数の実行の中に値をもつ.
  • 手続きの引数に現れないもの.

同様なことを関数型パラダイムで実現するためには, 仮引数に状態を持たないといけない.

Cell #

Explicite State (明示的状態) を表す基本型. 二つの構成要素からなる.

  • 名前値 (Vaiue)
  • 単一代入格納域への参照 (Identifier)
declare
fun {Reverse L}
   % 空リストの cell を生成
   Rs = {NewCell nil}
in
   % リストの各要素を取り出して内部 Cell に結合
   for X in L do
      Rs := X|@Rs
   end

   % 内部セルをリターンする.
   % Ruby っぽい!
   @Rs
end

{Show {Reverse [1 2 3 4]}}