原です。

 >まつもと ゆきひろです

 >田中さんの[ruby-dev:13598]での考察をベースにもういちど考え直
 >します。考え直すたびにファクターが増えて、脳の容量が足りない
 >んですけど。もうちょっとキャパシティの大きな脳だったらよかっ
 >たな。

でも、もうほとんど最終段階ですよね。現状を確認してみます。
まず[ruby-dev:13567](4)つまり、

   (1) すべての(多重代入を含む)代入

      A = B

    は、ただ一つの変数xをもって、

      x = B
      A = x

    と書ける。

という分解を認める事にしました。しかし、x = 1, *[] の値を x == 1 とす
るか x == [1] とするかはまだ決まっていません、これは保留にしています。

実は第2段階の A = x の多重代入の仕方もちょっと複雑ですが、多分議論が
分かれる事は無いと思います。

更に、return と yield も同様と考えていいでしょう。つまり、

   (2) B オブジェクトあるいはオブジェクトの列とするとき

      return B

    は、ただ一つの変数xをもって、

      x = B
      return x

    と書き直せる。

全く同様に、

   (3) B オブジェクトあるいはオブジェクトの列とするとき

      yield B

    は、ただ一つの変数xをもって、

      x = B
      yield x

    と書き直せる。

と、ここまでは確定したといえる。まあ(3)は別解があり得るけど
これで確定したとしましょう。

ちなみに、配列が代入された変数 arr を foo(*arr) と、メソッドに送っ
たり、yield(*arr) と送ったりする事はあり得るが、return(*arr) とす
るコードは、ほとんどあり得ないと言っていいです。なぜならこの時、
多重代入 x = *arr が起こるけど、x の値は、arr の length が 1 か 
2 以上かで、(配列の)中身か配列か、という質的な変化が起こってし
まい、扱いにくい(情報が落ちる)からです。従って

   return *arr と書くな、return arr と書け

を標語にして良いでしょう。


さて、[ruby-dev:13598]で田中さんは、

 >単値 -> 単値
 >  代入の右辺 -> 代入の左辺
 >  return -> メソッドの返り値
 >  yield -> ブロック引数
 >
 >単値 -> 多値
 >  yield -> メソッド引数                 (Method#to_proc)
 >
 >多値 -> 単値
 >  メソッド呼び出し -> ブロック引数      (define_method)
 >  Method#call -> ブロック引数           (define_method)
 >  Proc#call -> ブロック引数
 >  Continuation#call -> メソッドの返り値
 >
 >多値 -> 多値
 >  メソッド呼び出し -> メソッド引数
 >  Method#call -> メソッド引数
 >  Proc#call -> メソッド引数             (Method#to_proc)

と整理されていますが、このうち、Method#call の「多値 -> 多値」も、
議論の余地はほとんどありません。そのまま送るだけです。

すると残るのは、

   (i)   x = 1, *[]
   (ii)  Proc#call
   (iii) Method#to_proc

だけ、と言えると思います。