- 関数型プログラミング言語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の関数を作り出せてしまうのは、 カリー化の考え方から見て矛盾があると思います。 どういう理屈でこれは成り立っているのでしょうか?
|