Loading [MathJax]/extensions/tex2jax.js

2025年3月29日土曜日

モナドの活用

 Haskell入門 を久しぶりに読み直してみた。P168にMaybeモナドについて少し復習してみた。

getItemWithMonad menu category name =do
  subMenu <- lookup category menu
  price <- lookup name subMenu
  return (category,name,price)

途中、Nothingを記述しなくても自動的に、該当しなければ、最後はNothingになる。うまくできていると思う。
これを、手続き型言語で、実現しようとすると条件分岐に頼らざるを得ないけど、その必要もない。
このへんが、関数型言語のモナドの強みなのかもしれない。

追記>試しに、ChatGPTで、ELMのMaybeを使うコードに変換してみた。ELMはモナドをサポートしていないため、少しコード量が増えてしまうようだ。
type alias Menu = Dict String (Dict String Float)
getItemWithMonad : Menu -> String -> String -> Result String (String, String, Float)
getItemWithMonad menu category name =
    case Dict.get category menu of
        Just subMenu ->
            case Dict.get name subMenu of
                Just price -> 
                    Ok (category, name, price)
                Nothing -> 
                    Err "Item not found"
        Nothing -> 
            Err "Category not found"

2025年3月14日金曜日

ルベーグ積分 理論と計算手法 P199

 補題9.13(2)でまた、つまづいてしまった。仕方なく、だめもとでChatGPTに頼ってみたら、きちんと回答してくれた。AIの力も凄いものだと驚きました。ここ何か月間の間にパワーアップした?

 質問は 「ルベーグファトウの定理を使い、∫A  max k≦n fk μ ≦ ν(A)  から ∫ sup n∈N  fn  μ ≦ ν(A)をいえますか?」としました。 回答に少し補足を入れてまとめてみた。

∵) gm=max k≦n fk  (これは増加列 ①)として   定理を適用すると

∫A  lim inf n→∞  gn  μ ≦ lim inf n→∞ ∫A gn μ

左辺は  ∫A sup n∈N fn μ  ②                       ↓ここで①を使う

また sup n∈N inf k≧n gn  = lim n→∞ inf gn=lim n→∞ gn  =sup n∈N fn   これが②の理由

∫A gn  μ ≦ ν(A)  で n→∞ ならば  lim inf n→∞ ∫A gn μ≦ ν(A)

ゆえに 結論  ∫A  sup n∈N fn μ ≦ ν(A)

定理に必要な優関数がないので、質問したら、優関数はf1(x)という回答。専任の家庭教師がついているような感覚になる。