ごとけんです

まつもとさん [ruby-list:6164] Re: Ruby 連載第 3回>
 > |抽象 method(abstraction method)というのは? 
 >
 > イテレータブロックを与えてやらない限り具体的(concrete)なメソッ
 > ドにならないから,という気分でしょうか?

むしろ「イテレータブロックからイテレータ変数の宣言みたいな
部分 |i,j,..| を除いた部分」が関数になるという感じです。
λを抽象演算子呼ぶ理由は、一般には具体的な A が (λx.A) と
書くことで x を引数とする関数であるかのようにするからです。
関数に引数を渡すことを具体化と思えば、引数がとれるように
するのを抽象化と Church さんが呼んだのは悪くないと思います。

abstraction operator はとってもイテレータなイメージなので
一応おおざっぱに解説しきますと…
まず A と B をλ項とします。

  λ項とは、[^λ.] な文字集合 V の要素を変数とよぶことにして
  次のように帰納的に定義される文字列集合の要素です:

  L1) x が変数ならば x はλ項
  L2) A と B がλ項ならば AB はλ項
  L3) x が変数かつ A がλ項ならば (λx.(A)) はλ項

  ここで、L3) の 「(A)」 を「λ項 (λx.(A)) における x のスコープ」と
  いうことにします。スコープの中にさらに L3) で作られたλ項がある
  場合は普通のプログラム言語のようにスコープを解釈します。

んで、λ項 AB のβ簡約というのは、A のスコープに B を
代入する操作のことです。いくつかの A の例を示すと、
例1: (λx.(xyx))B → ByB
例2: (λx.(zxy(λx.(xx))))B → zBy(λx.(xx))
例3: (λx.yz)B → yz
てな感じです。
さてこんな感じですから形式的には 
λx.A の「x.(A)」というのはイテレータブロック {|x| A} に
見えますし「λ」はイテレータに相当するというわけです。
また (λx.(A))B は yield B に相当します。

 > 私に数学的素養がないんで,ピンと来なかったんですが,一般受け
 > するようなら採用しても良いんですけど.でも,ごとけんさんも認
 > めているように
 >
 > |もっともこの背景を知らないとわけ分かんないですが。
 > 
 > こういう意味ではちょっと難しいかなあ.

まぁそーなんですよね。
ぷろぐらまーさんたちがあまり知らなそうなのが残念。
でもぴったりなんだなぁ…理論計算機科学の課程を
経た人は分かると思うんだけど。
いっそのこと「ラムダ型メソッド」とか。
でも lamba ってあるし…

-- gotoken

 > p.s.
 > 「議論のポイントを押えつつ,面白い人」…こういう評価は…嬉しい ^^;;;

恐縮でし *^^*