[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000375] Re: NumArray test version



ごとけんです

In message "[dennou-ruby:000371] Re: NumArray test version"
    on 00/08/20, Takeshi Horinouchi <horinout@xxxxxx> writes:
>れば自然なのでは?  ちなみに私は yorick と同様に [] に演算子も入
>れられるようにしたいと思ってます。[] の役割を Fortran90 レベルに
>留める必要はないのでは?

Yorickというお手本があるならそれを真似るのも構わないと思いま
す。文法的に無理が出ることもあるでしょうから、その場合は工夫
したりあきらめたりする必要もあるやもしれませんが、やって見る
価値はあるでしょう。

僕の [] に対する思い入れとしては、キーによる参照です。キーが
式と言うのは若干僕の直観を超えてる部分も無きにしもあらずです
が、まぁ、慣れの問題かも知れません。

[dennou-ruby:372]の例で言うと

  a[lon.gt(180.0), true, true]

よりは、次元にキーワードをマップする方法があって、例えば、

  a.section(0)[idx]      # 0番目の添字が idx に固定された配列 a
  a.section(1)[:>=, val] # 1番目の添字が val 以上に制限された配列 a
  a.section(2)[10..20]   # 2番目の添字が 10..20 に制限された配列 a

というようなのがあったら、

  module SimpleGlobe
    def lon; section(0) end
    def lat; section(1) end
    def time; section(2) end
  end

  a.extend SimpleGlobe

  a.lon[180.0].lat[-10..10]

で a のうち経度 180.0 緯度 -10..10 という制限された配列を表
現することが出来ますね(添字が -10 なんて言うのをどう扱うかと
言う問題はありますが)。なお、ここでは section はデータそのも
のはコピーせずに共有して、アクセス方法だけを差し替えたオブジェ
クトであると考えています。

ただ、Ruby 1.4.x までは :symbol は Integer なので [:>=, val] 
は出来ないんですが、1.5.x 以降では :symbol はSymbolというク
ラスのオブジェクトですので機能します。

-- gotoken