タグ

カリー化に関するatm_09_tdのブックマーク (8)

  • 食べられないほうのカリー化入門 - Qiita

    『カリー化』(Currying) という概念をご存知でしょうか。"Curry" はべ物のカレー(Curry)と同じスペルですが、ここでいう Curry はそれとは別のもので、多くのプログラミング言語に応用できるかもしれない、とても便利かもしれない概念です。 では教えてくれ。”カリー化”とはなんのことだ? 『ふたつの引数のうち、大きい方の数を返す』という機能を持った関数 max を実装したいとしましょう。そのようなとき、大抵は次のように定義すると思います。 この関数 _max も『大きい方の数を返す』という機能を持っていますが、_max は max とは呼び出し方が少し異なります。たとえば、_max で 1 と 2 のうち大きい方を求めるには、 _max(1)(2) のように書きます。 _max が通常の max と異なるところは、関数を呼び出すときに引数をひとつづつ渡すようになっていると

    食べられないほうのカリー化入門 - Qiita
  • カリー化、部分適用、クロージャという間違いやすい三種についての簡単なメモ書き - Line 1: Error: Invalid Blog('by Esehara' )

    追記 カリー化を間違えてカーリー化という表記をしていたのを修正しました。 そもそもカリー化とは何か 複数の引数を取る関数は、一つの引数を取る、関数を返す関数の連続として表現できるということ、と言葉で表現しても抽象的すぎるので、ちょっと式で表してみる。 まず初めにラムダの導入 例として、ある整数に対してプラス1する関数を定義する。このような関数は、として表現できる。 ここでこの関数はplusoneという名前を与えられているが、このx + 1という関数そのものを表現するような記法があると便利だろう。そこで、をそのような記法として定義する。 この記法を用いることにより、上記のはとして表現できるようになる。つまり、関数それ自体を表す記法を導入することによって、関数の名前と、関数それ自体を区別することができるようになる。 カリー化 このような考え方が便利なのは、関数を返す関数というものを表現できるよ

  • ジェネリクスのカリー化 - プログラマーの脳みそ

    関数を扱えるだけでは、モナドを表現するには不十分過ぎる - xuwei-k's blogを見て、言語の型システムの表現力とその限界とはなんなんだろうということをモヤモヤと考えていた。 ここで話題になっているのは型変数を持つ型変数という話題である。これを便宜的に高階型変数とか、高階型と表現している。Javaのジェネリクスで例えれば public class Foo<T<X>> {} といったように型変数Xを持つ型変数Tという表現の話しである。Javaの言語機能的にはコレはできない。 以前、僕の書いたJavaによる高階型変数の実装 - プログラマーの脳みそではこの出来ないはずの高階型変数をJavaの言語機能で実現するにはどうしたらいいかという工学よりの話題で、型理論のような理論よりの話題としてはどう評価するべきなのかちょっとよくわからない。 Higher-kind Generics Scala

    ジェネリクスのカリー化 - プログラマーの脳みそ
  • 部分適用をカリー化と呼ばないで - kmizuの日記

    カリー化と部分適用の違いについては、過去のエントリ カリー化 != 部分適用 で既に述べており、決着もついているので改めて書きません。 カリー化 != 部分適用のエントリを書いたのは2009年12月です。もう3年以上前の話になります。ですが、JavaScript界隈などをみると、未だにカリー化と部分適用の違いについての誤解は残っているようです。一方で、静的型付き言語界隈でそのような誤解をほとんどみかけません。カリー化が関数の「型」を変換する操作(関数)であるために、動的型付き言語にのみ慣れ親しんでいると、両者の違いがわかりにくいのかもしれません。 ある技術用語が指すものを誤解する事自体は仕方ないことですし、責めるものではありません。また、用語が指すものは時代を経ると変わっていくものだという主張もあるでしょう。ただ、カリー化という用語の定義は明確に定義されており、数十年もの歴史があります。こ

    部分適用をカリー化と呼ばないで - kmizuの日記
  • カリー化談義 - あどけない話

    最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。 いろんな定義 「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。 部分適用という意味 これは明らかに間違い 「複数の引数を取る関数」を「一引数を取る関数のチェインに直す」こと これはkmizuさんの定義。世間でもよく使われる。 「構造体を一つ取る関数」を「構造体のメンバーを複数の引数にばらし、一引数を取る関数のチェインに直す」こと これは僕の定義。というか、Haskellコミュニティの定義。 「部分適用」の意味で使うのは明らかに間違いのなで排除。定義2と3について議論する。あとで、部分適用とは何かに

    カリー化談義 - あどけない話
  • お前に本当のカリー化を見せてやろう、Groovyで - No Programming, No Life

    はじめに 思いの外話題になっているようなので、Groovyでちゃんとしたカリー化をする関数を書いてみました。ちょっとタイトルはあれですがお許し下さい。 こんな感じでいいんですよね?(ツッコミ大歓迎) ここでは、addが引数を3つ取って、加算するクロージャです。メソッドrealCurryはクロージャを引数にとり、カリー化したクロージャを返却します。 add = {a, b, c -> a + b + c } ↓カリー化! curriedAdd = {a -> {b -> {c -> a + b + c}}} 当はClosure.metaClass.getCurryとかでやりたかったんですけど、どうもdelegateまわりが変な挙動をするのでバッサリ諦めました。あと、都合によりアンカリー化は実装しておりませぬ。 foldLeftで使ってみる (2011-09-06 追記) カリー化 != 部

    お前に本当のカリー化を見せてやろう、Groovyで - No Programming, No Life
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • カリー化と部分適用の違いと誤用

    kmizu @kmizu 正直に言うと、Groovy自体は別に好きでも嫌いでもないのだけど、カリー化してないのにcurryとかいうメソッド名付けてたり(標準で)、概念の無理解が目立つ部分があって、その辺がちょっと…という思いがあったり。 #scalajp #groovy

    カリー化と部分適用の違いと誤用
  • 1