Я не знаю, какой-либо способ, чтобы использовать нужным конъюнкции, чтобы изменить заливку expand
(#^:_1
)
Метод, который я знаю, как использовать, состоит в том, чтобы написать эквивалент expand
, для которого мы указываем элементы заполнения т.
Следующий код позволяет настраивать расширение, как вы описали. Он был написан для работы с версией 5, поскольку вы указали, что полагаетесь на это, но я тестировал его только под версией 6. Как обычно, это, вероятно, подвержено дальнейшей доработке.
xpand=: 1 :'((retention j. expansion)@:[ #!.u [email protected]:])'
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=: [email protected]:] }~ [:i.+/
insert=: +/ * -.
Обратите внимание, что u,~]
часть не совместим с версией 5. Использование ],u"_
вместо совместимости.
что это за язык – dynamic
@ yes123: Это J, который развивается и похож на APL. –
И да, мое смещение для J5 над J6 показано в боксах. – MPelletier