【.NET】F#について語れ【OCAML】at TECH【.NET】F#について語れ【OCAML】 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト400:デフォルトの名無しさん 08/12/30 02:53:51 >>392 普通にかけないんだけどなにが普通なんだ? let x = 2 and y = 1;; どういう仕様なんだと思ったけどandの前に改行がいるんだな 401:デフォルトの名無しさん 09/01/04 21:03:52 天才ども教えてくれ let f a b c = match a, b, c with | Some a, Some b, Some c -> Some (a, b, c) | _ -> None と定義して、以下を実行すると value restriction と言われて結果が None に ならない。 f (Some 3) None (Some 1.5) 分かる人いる? そもそもvalue restrictionとは何なのか。 402:デフォルトの名無しさん 09/01/05 22:53:07 >>401 天才じゃないが答えてみる 関数 f の型は val f : 'a option -> 'b option -> 'c option -> ('a * 'b * 'c) option になるわけだけど f (Some 3) None (Some 1.5) という式を評価しても 'b の型は最後まで確定しないわな それはよろしくない(→というのが超大雑把な value restriction の説明) つまり 'b の型を明らかにすれば error を消せる 簡単には適当な型注釈をつけてやれば OK で f (Some 3) (None : int) (Some 1.5) とか、あるいは (f (Some 3) None (Some 1.5) : (int * int * float) option) とかすればよい しかし通常は文脈から 'b が具体的な型に決まることが多い if true then f (Some 3) None (Some 1.5) else f None (Some 1) None だもんで型注釈に頼るような場面は少ないように思われる 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch