関数型プログラミング言語Haskell Part34at TECH関数型プログラミング言語Haskell Part34 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト740:デフォルトの名無しさん 26/03/02 18:36:01.12 nktAT8k9.net わかってなさそう 741:デフォルトの名無しさん 26/03/02 18:59:57.06 tWwuztZJ.net モナーなんてZ世代は知らない 742:デフォルトの名無しさん 26/03/02 19:20:21.63 zdTnYiWN.net 具体的にはどこが?計算とかいう概念持ち出すところ? それだともう根本的だよね 743:デフォルトの名無しさん 26/03/02 19:41:30.44 nktAT8k9.net チャーチロッサーの話ならモナド持ち必要がない 744:デフォルトの名無しさん 26/03/02 19:59:33.68 zdTnYiWN.net チャーチロッサーの定理の話なんてしてないが 745:デフォルトの名無しさん 26/03/03 20:09:29.90 AsM/jRKA.net プログラミングのモナドにおいて、値(value)と計算(computation)はどのように区別されますか。 ================= Eugenio Moggiの理論における「値(Value)」と「計算(Computation)」の区別は、**「型(Type)」というレンズを通して明確に線引き**されています。 一言で言えば、**「それ自体が何であるか(静的)」**と**「それが何を引き起こすか(動的)」**の違いです。 ### 1. 値(Value): 値とは、プログラムの中で「純粋なデータ」として扱われるものです。 * **性質:** それ自体に副作用はなく、評価した瞬間にその中身が確定しています。 * **型としての表現:** 単なる型 で表されます(例:`Int`, `String`, `Bool`)。 * **例:** 数値の `10` や、文字列の `"Hello"`。これらはどこで使われても、それ自体がプログラムの状態を変えたり、エラーを投げたりすることはありません。 ### 2. 計算(Computation): 計算とは、「最終的に型 の値を返すが、その過程で**何らかの付随的な効果(Effect)**を伴うプロセス」を指します。 * **性質:** 実行されるまで結果がわからなかったり、実行中にログを出力したり、失敗したりする「振る舞い」を含んでいます。 * **型としての表現:** モナド を被せた型 で表されます。 * **例:** * `Maybe Int`: 「`Int` を返すが、失敗するかもしれない」という計算。 * `IO String`: 「`String` を返すが、外部世界との入出力を伴う」という計算。 ### 3. 両者の境界線:Monadの役割 Moggiはこの「値」と「計算」をバラバラにするのではなく、モナドの2つの基本操作によってこれらを厳密に、かつ安全に繋ぎ合わせました。 #### ① 値を計算に昇格させる (`unit` / `return`) 純粋な値を、「何の効果も伴わない、ただ値を返すだけの計算」の中に閉じ込めます。 > 例:`10` という値を、`Just 10`(Maybeモナドにおける計算)にする。 #### ② 計算と計算を繋ぐ (`bind` / `>>=`) 「ある計算の結果(値)」を「次の計算」へと引き渡します。このとき、計算のプロセス(副作用)が連鎖していきます ここが肝心なのですが、`bind` は **「計算 の中から値 を取り出して、次の計算を生成する関数 に渡す」** という役割を担っています。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch