MFGドキュメント
Home
Getting Started
Reference
  • ja-JP
  • en-US
Home
Getting Started
Reference
  • ja-JP
  • en-US
  • MEP 2: rsum

MEP 2: rsum

  • Created: 2022-08-29 20:49:16

もともとrsumは重要なので特別扱い、という考えだったが、あんまり重要では無い気もしてきた。 他のもっと重要な概念がいろいろ出てきたので、rsum自体は普通の関数呼び出しにできないか検討する。

現状は以下のようになっている。

rsum 0:MOSAIC_WIDTH, 0:MOSAIC_WIDTH by |rx, ry|{
  let [a, r, g, b] = clamped( MOSAIC_WIDTH*x+rx, MOSAIC_WIDTH*y+ry )
  [a, a*r, a*g, a*b]
}

whereのある場合

  rsum 0:2*radius+1, 0:2*radius+1 by |r_edgex, r_edgey|
  where (r_edgex-radius)^2 + (r_edgey-radius)^2 <= radius^2 {
    let sx = x+r_edgex-radius
    let sy = y+r_edgey-radius

    extendedExp(sx, sy)
  }

単なる関数で最後の引数がblockは外に出る、でいいのでは。

rsum(0:MOSAIC_WIDTH, 0:MOSAIC_WIDTH) |rx, ry|{
  let [a, r, g, b] = clamped( MOSAIC_WIDTH*x+rx, MOSAIC_WIDTH*y+ry )
  [a, a*r, a*g, a*b]
}

 rsum(0:2*radius+1, 0:2*radius+1) |r_edgex, r_edgey|
  where (r_edgex-radius)^2 + (r_edgey-radius)^2 <= radius^2 {
    let sx = x+r_edgex-radius
    let sy = y+r_edgey-radius

    extendedExp(sx, sy)
  }

検討事項

カッコのあとに改行を入れたいが、改行はちょくちょくexpressionの区切りとして使っているので難しい。

例えば以下のようにしたい気はするが。

 rsum(0:2*radius+1, 0:2*radius+1)
 |r_edgex, r_edgey|
  where (r_edgex-radius)^2 + (r_edgey-radius)^2 <= radius^2 {

...があるとどうだろう?

 rsum(0:2*radius+1, 0:2*radius+1, ...)
 |r_edgex, r_edgey|
  where (r_edgex-radius)^2 + (r_edgey-radius)^2 <= radius^2 {

いまいちだな。これなら改行できない、の方が潔いか。

閉じカッコのあとはいつも改行をskipして次を探しても平気かもしれない。これはやってみて平気そうかどうか見てみるか。

条件が複雑になった場合に読みにくいのでは?という懸念もあるがどうだろう?

 rsum -mw:(2*mw+1) by |rx| {
   ...

関数にしてみよう。

  rsum(-mw:(2*mw+1)) |rx| {
    ...

まぁ別にいいかな、という気がする。そもそも演算子の優先順位的にはカッコはいらない。

  rsum(-mw:2*mw+1) |rx| {
    ...

これでいい気がするな。

最終更新: 2025/11/20 15:14
Contributors: Kazuma Arino