MEP 9: repeat_edgeとconstant_exterior
- Created: 2022-12-11 15:10:52
- 備考: MEP 18: デコレータをsamplerと揃える で上書きされた
現在のシンタックス
let! extended = constant_exterior!( input, 0 )
は、
- let!というここでしか使わないシンタックスがあるが、これがややこしい
- 副作用を表していないのに!は一貫性が無い
という事でこのシンタックスを検討したい。
単純に以下のようにしようとした所
let extended = constant_exterior( input, 0 )
inputの所がExprじゃない為パース出来ない事に気づいた。 解決策としては、
- テンソルもすべてVariableとして存在出来るようにScopeにdefineする
- inputを特別扱いするようなシンタックスを考える
のどちらかが考えられる。
1はテンソルという制約が多いものを変数として扱える事が、かえってややこしさを生むんじゃないか?という懸念がある。 また、ここだけの為にテンソルをすべてスコープに入れる変更を入れるのも、必要な事に対する変更量が多い気もする。
一方でFuncObjがすでにそういう制約が多いExprとして存在しているので、ユーザーからしたややこしさは変わらないかもしれない。 そしてシンタックス的には一番自然という気もする。
2の路線では、以下のようなシンタックスを考えた。
let extended = constant_exterior<input>(0)
これなら、角括弧の間をテンソルとして扱えるので、無理にVariableを作る必要は無い。 またreduceやtransもこの中がテンソルなので、角括弧の中はテンソルで一貫性もある。
欠点はユーザーから見て単なる引数になってない理由がわかりにくくて無用に複雑に感じられるかもしれない。
個人的にはまずは実装の簡単さからも角括弧路線で行ってみたい気はしている。
MEP 18: デコレータをsamplerと揃える に変更した。