2005-05-09から1日間の記事一覧
λx.(x + a) のようなラムダ式で、xは仮引数(ラムダ式の束縛変数といいます)ですが、定義本体内に仮引数リストにない変数aが出てきますよね。aみたいな、仮引数宣言されてない変数を自由変数と呼びます。自由変数が、いつどのように束縛(具体化)されるか…
最近、キーワード「Kleene代数」の検索から来る人が多い(あくまで相対比率)のだけど、、、なんでだろう? と自分でgoogleを引いてみました。きょう現在、「Kleene代数」でgoogle検索すると、僕の日記エントリ(飼育記 2005-04-09 )は、1,020件中なんとト…
カリー化については、キマイラ・サイトのここにコソッとチョコッと書いてあったりしますが、2変数(一般にn変数)の関数を1変数関数にする手順です。例えば、Sum ≡ λx,y.(x + y) のとき、与えられたxに対して関数 λy.(x + y) を返すような関数 x → λy.(x + y…
Id ≡ λx.x をgroovyコードで書いてみる。 // まずは、identity Id = {|x| x} println Id(3) println Id("Hello") 3 Hello関数(クロージャ)を取り扱う関数(高階関数)の例として、“関数結合(合成)をする関数”を書いてみる。 Comp ≡ λf,g.(λx.g(fx)): //…
groovyでは、{|<仮引数リスト>| <定義コード>} という構文で、無名の関数のようなものを定義できます。これをクロージャと呼んでいるみたい*1。 // 関数とクロージャdef sumFunction(x, y) { x + y } // 関数定義 println sumFunction(2, 3)sumClosure =…