松尾です。3点。

GOTO Kentaro wrote:

1.

> ># プロシージャならselfを返してカスケードさせると便利かも、とか。
> 
> これって、関数だとまずいことでもありますか??

selfを返したいので、返り値に意味のあるメソッド(⊃ 関数)だとまずいと考
えました。

# 逆に言うと、「返り値に意味のないメソッドはselfを返そう」というキャン
# ペーンを張るだけで、カスケード問題はうまく行くんじゃないかなぁ…

でもごめんなさい。余談が発達していく事は本意ではありませんでした。必要
なら-listにて続けたほうがいいでしょう。

---------

2.

> ># ここでの話はcoerceアーキテクチャを前提としないんですよね?
> 
> 少なくとも僕は現在のcoerceとは違うモノを考える文脈のつもりで
> す。

了解しました。

---------

3.

> うーんともうすこし説明して下さいまし、その「定義域メソッド」。

説明になってるかどうか、今書いたメモを提出します_o_


定義域メソッド := 定義域に対して定義されたメソッド

定義域 := 集合のリスト(に名前をつけた物)
# 例
# 「集合S1の元e1、集合S2の元e2にf(e1,e2)を対応させる写像f」の定義域は S1 x S2、
# 「集合Sの元e1、e2にf(e1,e2)を対応させる二項演算f」の定義域は S x S、

集合 := リストクラスのインスタンス|クラス|定義域|集合
# 例
# 数値クラス、行列クラス、['apple','orange','peach',...],


定義域Foo、および定義域メソッドFoo::fは
(例えば以下の様に)定義する。

定義域 Foo < Super # 継承は未定義
  # 定義域の要素たる集合のリスト。
  SetList = [S1,S2,...]

  def f(e1,e2,...) # 引数の数は集合の数に等しい
    # 定義域メソッドの定義
  end
end


使い方

result = Foo::f(e1,e2,...)
result = Foo::f(e1,e2,...)

# 特別に選ばれたいくつかの定義域メソッドは、
#
# result = e1 op_f e2 (二項演算子風)
# result = op_f e1    (単項演算子風)
#
# 等と演算子風に表記できる。
# この場合、'op_f'がどの定義域メソッドと対応付けられるかは、
# (e1,e2,...)がどの定義域に含まれるかによって決まる。
#
# 一意に決まるようなメカニズムが必要。