ガード (プログラミング) ガード (プログラミング)の概要

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

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

以下の Haskell のコード例で、"|" と "=" の間の部分がガードである。

 f x
   | x > 0     = 1
   | otherwise = 0

これは、以下のような、数学で使われる記法に似ている。

この場合、ガードは "if"節と "otherwise"節にある。

上記の例のように複数のガードがある場合、先頭から順に評価され、最初に真となった分岐が選択される。

Haskell のリスト内包表記でのガード列は、1つでも偽であった場合にそのリスト要素が生成されない。これはつまり、個々のガードを論理積で結合したと見なすことができるが、リスト内包表記にはガード以外も列挙される。

言語

ガードのような機能を持つ言語として、HaskellCleanErlangoccamOCamlといったプログラミング言語や多くの並行論理プログラミング言語が挙げられる。Mathematicaではガードをconstraintと呼ぶ。形式手法の言語であるGuarded Command Language(詳細は歴史の節で後述)でも重要な構成要素である。

パターンガード

パターンガードとは、ガード内でパターンマッチングを行うこと(あるいはそのようなガード)である。この定義は Haskell についてサイモン・ペイトン・ジョーンズA new view of guards として1997年4月に提案し、その後実装されている。

Haskell での例を示す。

 clunky env var1 var2
   | Just val1 <- lookup env var1
   , Just val2 <- lookup env var2
   = val1 + val2
 ...other equations for clunky...

ここで、"<-" はパターンガード修飾子と呼ばれ、右辺を評価した結果を左辺とパターンマッチする。リスト内包表記のようにパターンガードを並べることができ、いずれかがパターンマッチに失敗すれば、その分岐は実行されない。


  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