>>  <<  Ndx  Usr  Pri  Phr  Dic  Rel  Voc  !:  wd  Help  Phrases

Merge And Amend

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

>>  <<  Ndx  Usr  Pri  Phr  Dic  Rel  Voc  !:  wd  Help  Phrases