トップページ > プログラム > 2015年09月05日 > zbNENDxs

書き込み順位&時間帯一覧

34 位/165 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000011000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net

書き込みレス一覧

関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
423 :デフォルトの名無しさん[]:2015/09/05(土) 17:50:27.56 ID:zbNENDxs
中置関数の部分適用について理解できないところがあるので、質問です。

まず下記の関数を定義しました。
siplus :: String ->Int -> Int
siplus str num = read(str) + num

普通に使うと次のように動作します。
> siplus "1" 2
> 3

最初のStringを部分適用したものの型を調べると、こうなります。
> :t siplus "1"
> siplus "1" :: Int -> Int

ここで最初のStringではなく、2つ目のIntを部分適用したいと思った時、
例えばこんな書き方はできません。
> :t siplus _ 2
> エラー

しかしこれを中置関数として扱った場合、2つ目のIntのみを部分適用した
関数を作ることができてしまいます。
> :t (`siplus` 2)
> (`siplus` 2) :: String -> Int

これは一体どういうことなのでしょうか?
String -> Int -> Intの関数への部分適用でString -> Intの関数を作り出せてしまうのは、
カリー化の考え方から見て矛盾があると思います。
どういう理屈でこれは成り立っているのでしょうか?
関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
425 :デフォルトの名無しさん[sage]:2015/09/05(土) 18:33:26.79 ID:zbNENDxs
>>424
なるほど、つまり中置記法の右側に値を置いたものは、
カリー化とは無関係で単にラムダの糖衣構文ってことなんですね。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。