構文糖衣: do記法とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 構文糖衣: do記法の意味・解説 

構文糖衣: do記法

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/16 04:57 UTC 版)

モナド (プログラミング)」の記事における「構文糖衣: do記法」の解説

bind 演算子 >>= を直接使ってプログラムを書くのがよい場合もあるが、典型的にはdo記法 (OCamlでは perform記法、F#ではコンピュテーション式)を使用し命令型言語のような見た目にできる。コンパイラはdo記法の式を >>= を使ったものに変換する例えa = do x <- [3..4] [1..2] return (x, 42) を変換した結果は以下となる。 a = [3..4] >>= (\x -> [1..2] >>= (\_ -> return (x, 42))) リストモナドの実装見てみようリストマップ行い結合を行う(平らにする)この関数は concatMap とも呼ばれるinstance Monad [] where m >>= f = concat (map f m) return x = [x] fail s = [] よって、以下のような変形が行われて、それぞれの式はすべて等価である。 a = [3..4] >>= (\x -> [1..2] >>= (\_ -> return (x, 42)))a = [3..4] >>= (\x -> concatMap (\_ -> return (x, 42)) [1..2] )a = [3..4] >>= (\x -> [(x,42),(x,42)] )a = concatMap (\x -> [(x,42),(x,42)] ) [3..4]a = [(3,42),(3,42),(4,42),(4,42)] リスト[1..2]は使われないことに注意しよう。左矢印つけないことで、連鎖した関数引数無視するように変換されて、値ではなくモナド的な構造だけが問題になることを示すことができる。例えば、状態モナドで値を生成せずに状態だけを変化させるようなときに使われる。do記法は >>= の単なる構文糖衣であるので、どんなモナドに対しても使うことができる。 Maybeモナドの値を安全に割り算する以下の定義も等価である。 x // y = do a <- x -- xとyの中に値がある場合取り出す b <- y if b == 0 then Nothing else Just (a / b)x // y = x >>= (\a -> y >>= (\b -> if b == 0 then Nothing else Just (a / b))) 同様にF#ではコンピュテーション式を使うことができる。 let readNum () = let s = Console.ReadLine() let succ,v = Int32.TryParse(s) if (succ) then Some(v) else Nonelet secure_div = maybe { let! x = readNum() let! y = readNum() if (y = 0) then None else return (x / y) } このmaybeブロック構文糖衣であり、以下の式に変換される。 maybe.Delay(fun () -> maybe.Bind(readNum(), fun x -> maybe.Bind(readNum(), fun y -> if (y=0) then None else maybe.Return(x / y))))

※この「構文糖衣: do記法」の解説は、「モナド (プログラミング)」の解説の一部です。
「構文糖衣: do記法」を含む「モナド (プログラミング)」の記事については、「モナド (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「構文糖衣: do記法」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



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

辞書ショートカット

すべての辞書の索引

「構文糖衣: do記法」の関連用語

構文糖衣: do記法のお隣キーワード
検索ランキング

   

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



構文糖衣: do記法のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのモナド (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS