expand
フィット結合を使用して( #^:_1
)の塗りつぶしを変更する方法を知りません。
私が使用する方法を知っているテクニックはexpand
、塗りつぶし要素を指定する同等のものを書くことです。
次のコードでは、説明したようなカスタム拡張が可能です。バージョン 5 に依存しているとのことでしたので、バージョン 5 で動作するように作成されていますが、バージョン 6 でしかテストしていません。
xpand=: 1 :'((retention j. expansion)@:[ #!.u prep@:])'
prep=: ,~ {.
retention=: 0:, +/ # 1:
expansion=: [:forwarddifference [:tallyzeros [:partition [:<\ pad
forwarddifference=: 2&(-~/\)
tallyzeros=: +/ @: -. &>
partition=: #~ (1: = {:)&>
pad=: 1&([,~ ,)
NB. example of use
empty =. <0 0$''
]r=. 0 1 1 0 empty xpand 'foo';'bar'
┌┬───┬───┬┐
││foo│bar││
└┴───┴───┴┘
$ each r
┌───┬─┬─┬───┐
│0 0│3│3│0 0│
└───┴─┴─┴───┘
元の回答を投稿して以来、より簡潔な代替案を取得しました。
xpand =: 1 :' index @:[ { u,~] '
index =: retain + insert
retain=: I.@:] }~ [:i.+/
insert=: +/ * -.
このu,~]
部分はバージョン 5 と互換性がないことに注意してください],u"_
。互換性のために代わりに使用してください。