Two arguments x and y can be merged by interleaving their items (necessarily of a common shape) as determined by a Boolean list of shape x + y. For example:
x=: >;:'That they hunted from hill' y=: >;:'second time me to plain' b=: 0 1 1 0 0 1 0 0 1 1 mrg=: 1 : '/:@/:@(x."_) { ,' x([ ; ] ; (,.b)"_ ; b mrg)y +----------------------+ ¦That ¦second¦0¦That ¦ ¦they ¦time ¦1¦second¦ ¦hunted¦me ¦1¦time ¦ ¦from ¦to ¦0¦they ¦ ¦hill ¦plain ¦0¦hunted¦ ¦ ¦ ¦1¦me ¦ ¦ ¦ ¦0¦from ¦ ¦ ¦ ¦0¦hill ¦ ¦ ¦ ¦1¦to ¦ ¦ ¦ ¦1¦plain ¦ +----------------------+
The form of the function b mrg obtained by applying the adverb mrg suggests the form of a function MRG to be applied to a Boolean left argument and a right argument formed as the catenation of the original arguments. Thus:
b mrg /:@/:@(0 1 1 0 0 1 0 0 1 1"_) { , MRG=: /:@/:@[ { ] b MRG x,y That second time they hunted me from hill to plain
The argument b need not be Boolean, but may be anything of the requisite number of items that is in the domain of /:. For example:
b=: 0 2 2 1 0 2 2 2 0 0 1 1 2 1 2 1 1 1 1 1 y0=: 'abcd' [ y1=: '123456789' [ y2=: 'zzzzzzz' b MRG y0,y1,y2 azz1bzzzcd23z4z56789
a0=: mrg=: 1 : '/:@/:@(x."_) { ,' | x b mrg y merges x and y |
m1=: MRG=: /:@/:@[ { ] | b MRG x,y is equivalent to above |
d2=: alt=: ,@,. | Merge items from x and y alternately |
For example:
x=: 'temr rtes' y=: 'h axbohr ' x alt y the marx brothers
An argument can be amended by replacing those cells selected by an index, by the cells of another argument. For example:
x=: 'ABCD' [ y=: 'abcdefghij' i=: 4 2 8 6 i{y ecig ]z=: x i} y abBdAfDhCj m=: a.{~(a. i. 'A')+i.5 5 ]i=: 2 # &.> i. # m +-------------------+ ¦0 0¦1 1¦2 2¦3 3¦4 4¦ +-------------------+ x=: '+-*%^' m ; (i{m) ; x ; x i} m +-----------------------+ ¦ABCDE¦AGMSY¦+-*%^¦+BCDE¦ ¦FGHIJ¦ ¦ ¦F-HIJ¦ ¦KLMNO¦ ¦ ¦KL*NO¦ ¦PQRST¦ ¦ ¦PQR%T¦ ¦UVWXY¦ ¦ ¦UVWX^¦ +-----------------------+
Amendment can also be made by using a function that selects a portion of its argument. For example:
IR=: @(i.@$@]) Adverb to select indices of (ravelled) table right argument A=: IR } Adverb to amend selected portion of right argument d=: (<0 1)&|: Function to select diagonal of a table '+-*%^' (] ; d@] ; ]IR ; d IR ; d IR } ; d A) m +---------------------------------------------------+ ¦ABCDE¦AGMSY¦ 0 1 2 3 4¦0 6 12 18 24¦+BCDE¦+BCDE¦ ¦FGHIJ¦ ¦ 5 6 7 8 9¦ ¦F-HIJ¦F-HIJ¦ ¦KLMNO¦ ¦10 11 12 13 14¦ ¦KL*NO¦KL*NO¦ ¦PQRST¦ ¦15 16 17 18 19¦ ¦PQR%T¦PQR%T¦ ¦UVWXY¦ ¦20 21 22 23 24¦ ¦UVWX^¦UVWX^¦ +---------------------------------------------------+ m diag m Indices of ravelled m Indices of diagonal Amendments ur=: 2 _3&{. Select upper right corner (2 3$'+-*%^!') (] ; ur@] ; ]IR ; ur IR ; ur IR } ; ur A) m +------------------------------------------+ ¦ABCDE¦CDE¦ 0 1 2 3 4¦2 3 4¦AB+-*¦AB+-*¦ ¦FGHIJ¦HIJ¦ 5 6 7 8 9¦7 8 9¦FG%^!¦FG%^!¦ ¦KLMNO¦ ¦10 11 12 13 14¦ ¦KLMNO¦KLMNO¦ ¦PQRST¦ ¦15 16 17 18 19¦ ¦PQRST¦PQRST¦ ¦UVWXY¦ ¦20 21 22 23 24¦ ¦UVWXY¦UVWXY¦ +------------------------------------------+
a3=: IR=: @(i.@$@]) | f IR selects indices of ravelled rgt arg |
m4=: d=: (<0 1)&|: | Function to select diagonal of table |
m5=: ur=: 2 _3&{. | Function to select upper right corner |