ガード (プログラミング) 歴史

ガード (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/04/07 06:06 UTC 版)

歴史

頭部に書かれた式(条件式)を評価した真偽にもとづき、最初に真になった所の対応する本体を評価した値を全体の結果とする、というような記法はプログラミング言語以前に数学で使われており、Haskellのものなどは以下の歴史よりも、むしろ数学における記法をそのまま取り入れたものに近い。1960年の「Lispの論文」と呼ばれるRecursive Functions of Symbolic Expressions and Their Computation by Machine, Part Iマッカーシー)で導入された、

(p1 → e1, ・・・, pn → en)

という記法もその一種と言え、その後のLispではS式による記法が一般的になったものの、それでもLispの、ifではなくcondによる条件式はこれに近い。

1963年のCPLストレイチー他)にも似たものが存在しており、最初の部分式に対するガードが記述され、その後にガードが偽であった場合の部分式が記述される。例えば以下のように記述される。

(x>0) -> 1/x; 0
x>0 ? 1/x : 0

後半の部分式も条件付きの式として記述できる場合、以下のような記述が可能となる。

(x>0) -> 1/x; (x<0) -> -1/x; 0

1966年のISWIM(Landin(en:Peter Landin))では既に else 節に相当する部分のない条件付き式があり、ガードと二者択一の概念が分離されている。ISWIM では、どの分岐も真でない場合、全体として式の値は「未定義」とされ、値が計算されないと定義されていた。

プログラミング言語というよりは理論寄りで提案されたものだが、1975年[2]Guarded Command LanguageダイクストラEWD472)もガードを多用する言語である。文献から引用すると、たとえば、xとyの最大値をmに求める記述はifとガードを使って、

if   x ≥ y → m:= x
   ▯ y ≥ x → m:= y
fi .

となる。さらに、繰返し評価を行うdoは次のような記法で、

do   ql > q2 → ql, q2 := q2, ql
   ▯ q2 > q3 → q2, q3 := q3, q2
   ▯ q3 > q4 → q3, q4 := q4, q3
od .

いずれかの条件が成立する限り繰り返す(ifの場合と違い、doでは複数の条件が成立した場合はいずれかが選ばれる)。

1976年のSASL(en:SASL (programming language)[3], en:David Turner (computer scientist))は「ガード」という用語を使った初期のプログラミング言語の1つであり、関数の定義を複数持たせて、ガードによって適用する定義を選択するようになっていた。これは細かい表面上の違いを除けば、後のHaskellにおける記法のガードの位置を後ろにもってきたようなものであり、あるいはHaskellのそれ以上に数学における記法に似ている。

fac n = 1,             n = 0
      = n * fac (n-1), n > 0

1980年代のGuarded Horn Clauses(上田)もガードを多用する言語である。


  1. ^ ないし、真 (true) として扱われる値(言語により異なる)でなければならない
  2. ^ Dijkstra, E.W.: Guarded commands, nondeterminacy and formal derivation of programs. Commun. ACM 18 (1975), 8: 453–457.
  3. ^ 初出は1972年となっているが、何度か更新している。


「ガード (プログラミング)」の続きの解説一覧



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ガード (プログラミング)」の関連用語

ガード (プログラミング)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ガード (プログラミング)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのガード (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS