- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:haskellの合成関数について)
haskellの合成関数とは?
このQ&Aのポイント
- haskellの合成関数について調べてみました。合成関数は(.)という演算子で表されます。
- 合成関数(.)は引数として一引数関数と定数関数を受け取り、それらを合成して新しい関数を作ります。
- また、合成関数を使って二引数関数を合成することもできます。例えば、(+) . (+3) のような式は正しく評価されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
(+) を「二引数関数」と思っちゃうからいかんのよ. 「数値を引数にして『数値を引数にして数値を返す関数』を返す」なので, 引数は 1個.
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.4
えぇと, 「組み合わせ理論」じゃなくって「組み合わせ論理」ね. 英語だと Combinatory Logic.
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.3
補足です. c のみならず, a や b も関数型となることはあり得ます. 意味があるかどうかはさておき, 2つの引数に共通する型変数 b を同じものにできるなら「型付け」における問題は発生しません. 例えば foo :: Int -> Int -> Int bar :: (Int -> Int) -> Int -> Int のとき (bar . foo) という合成が可能で, その型は (bar . foo) :: Int -> Int -> Int となります. ちょ~ニッチな世界だけど, 組み合わせ論理を知っていると幸せになれる... かなぁ?
質問者
お礼
回答ありがとうございます。 もう一度一つ目の回答を考えるとなんとなくわかりました。 それと回答に挙がっている「組み合わせ理論」というのは数学における「組み合わせ理論」でしょうか。
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.2
この場合は関数 (というよりは型だから「関数型」というべきか?) になります. ああ, 考えてみたら「第一引数に一引数関数、第二引数に一引数関数、第三引数に定数関数を取る、という解釈」がおかしいんだ. 合成した結果は関数なんだから, 本当は (b -> c) -> (a -> b) -> (a -> c) と読まなきゃならない.
お礼
回答ありがとうございます。 ということは(.)関数の(b -> c) のcは関数になるわけでしょうか?