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| {
...
これでいい気がするな。