• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:haskellの合成関数について)

haskellの合成関数とは?

このQ&Aのポイント
  • haskellの合成関数について調べてみました。合成関数は(.)という演算子で表されます。
  • 合成関数(.)は引数として一引数関数と定数関数を受け取り、それらを合成して新しい関数を作ります。
  • また、合成関数を使って二引数関数を合成することもできます。例えば、(+) . (+3) のような式は正しく評価されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

(+) を「二引数関数」と思っちゃうからいかんのよ. 「数値を引数にして『数値を引数にして数値を返す関数』を返す」なので, 引数は 1個.

puntero
質問者

お礼

回答ありがとうございます。 ということは(.)関数の(b -> c) のcは関数になるわけでしょうか?

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

えぇと, 「組み合わせ理論」じゃなくって「組み合わせ論理」ね. 英語だと Combinatory Logic.

参考URL:
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF%E8%AB%96%E7%90%86
  • 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 となります. ちょ~ニッチな世界だけど, 組み合わせ論理を知っていると幸せになれる... かなぁ?

puntero
質問者

お礼

回答ありがとうございます。 もう一度一つ目の回答を考えるとなんとなくわかりました。 それと回答に挙がっている「組み合わせ理論」というのは数学における「組み合わせ理論」でしょうか。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

この場合は関数 (というよりは型だから「関数型」というべきか?) になります. ああ, 考えてみたら「第一引数に一引数関数、第二引数に一引数関数、第三引数に定数関数を取る、という解釈」がおかしいんだ. 合成した結果は関数なんだから, 本当は (b -> c) -> (a -> b) -> (a -> c) と読まなきゃならない.

関連するQ&A