我不知道有什么方法可以使用 fit 连词来改变expand
( #^:_1
)的填充
我确实知道如何使用的技术是编写一个等效项expand
,我们为其指定填充元素。
以下代码允许自定义扩展,如您所描述的。它已被编写为与版本 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"_
改为使用以实现兼容性。