MFGドキュメント
Home
Getting Started
Reference
  • ja-JP
  • en-US
Home
Getting Started
Reference
  • ja-JP
  • en-US
  • MEP 11: rsumの一般化

MEP 11: rsumの一般化

  • Created: 2023-01-09 12:17:02

現状テンソルなどを指定しないループはrsumしか無いが、rsumは足すという特殊な操作である。 当然mulやORなども欲しい事があるが、現状はその書き方が無い。

汎用的なreduceとその周辺のシンタックスについて考える。


reduce<ts>.accumulate との類似性でいけば、reduce_accumulate的な名前のなにかがあれば良い。 rsumとの類似性で行くならraccmだろうか?

raccm(-2:5, init=1) |r, accm| { input(x+r, y) * accm }

他の言語なら単なるreduceと呼ばれる事が多い気がする。 例えばpython。 functools — Higher-order functions and operations on callable objects — Python 3.11.1 documentation

一貫性は犠牲になるが、他の言語との類似性を考えるならreduceでも良いかもしれない。

reduce(-2:5, init=1) |r, accm| { input(x+r, y) * accm }

ここだけを見るならこちらの方が自然だなぁ。


rsumは良く使うので特別に用意しても良いと思う。 rmulはまぁいらないかなぁ。reduceで自分で書け、で良い気がする。

どちらにせよこの辺はlowerでreduceに展開されるだろうから、resolveとかのパーサー周辺以外はあまり作業は無いので、必要だと思ってから足せば良い気もする。


あまり使わないと思えば、reduce_accumulateでいい気もしてきた。


やはりreduceでいい気がしてきた。


パースの都合でinitを先にする。現状rangeは特別扱いしているのでinitが先の方が都合が良いが、将来的にはexprとしてパース出来るようにしたい。 ブロック引数のaccmが後ろなのは違和感もあるが、trans.accumulateとの一貫性のためこうしておく。 ここは変なのでそのうち直したい。

reduce(init=1, -2:5) |r, accm| { input(x+r, y)*accm }
最終更新: 2025/11/20 15:14
Contributors: Kazuma Arino