Transitive Closer (TC) is applying the same operation over and
over until the results stop changing.

As a simple example +/ can be expressed: remove first two items,
prepend their sum.

In TC it is (typically) necesary to establish a stop condition. 
Here, it is: until there is more than one item. We apply operation 
only while stop condition is satisfied. Here's one step:

   2&(+/@{. , }.) ^: (1<#) 1 2 3 4 5
3 3 4 5

We get the sought +/ after applying the above ad infinum:

   2&(+/@{. , }.) ^: (1<#) ^:_ ]  1 2 3 4 5
15
   +/  1 2 3 4 5
15

Now for convenience, we separate the TC operator from
the functional arguments: operation and stop condition:

   tc=: 2 : 'u ^:v ^:_'

   2&(+/@{. , }.) tc (1<#) 1 2 3 4 5
15

Now, in line wrap problem we need to break the sequence
of words into lines. Suppose we calculated each word length
(plus 1 for space) and have line length.

   L=. 1 2 3 4 5 3 2 1 2 3 4 3 2    NB. word lengths +1

Continuing the idea of TCing +/ here we need to
do the +/ until we reach line end, which gives us
first line, and then repeat it until we exhaust all
words, which will give the rest of the lines. That's
two nested TCs.

Here's inner TC: calculate leading line length

   ln=. 1 : '2&(+/@{. , }.) tc ((m>:[:+/2&{.)*.(1<#))'
   8 ln L
6 4 5 3 2 1 2 3 4 3 2

For outer TC we need "trasitive accumulator" for 
intermediate results

   ta=: 2 : 'u&.> ^: (v&>) ^:a:'

We are interested in }.@(8 ln) which are unwrapped
words after each successive line. Getting their
lengths and then pairwise differences will yield
the sought word lengths of each line:

   ]s=. 2-/\ #&> }.@(8 ln) ta (0<#) <L
3 1 2 4 2 1

   ((# [EMAIL PROTECTED]) s) </. L
+-----+-+---+-------+---+-+
|1 2 3|4|5 3|2 1 2 3|4 3|2|
+-----+-+---+-------+---+-+



--- Mattia Landoni <[EMAIL PROTECTED]> wrote:

> Out of sheer curiosity, and far from intervening in the merit of the
> discussion, what does "transitive closure" have to do with "line wrap"? The
> Wikipedia entry failed to illuminate me. There must be some subtle
> connection!
> 
> 
> > From: Devon McCormick <[EMAIL PROTECTED]>
> >
> > > Yes - "transitive closure" will become my new
> > > catchphrase for the way we state things in J-world that render them
> > > opaque to everyone but college math professors and a
> > > few fellow travelers.  As I've mentioned before, when I originally
> > needed to
> > > do this,
> > > it was simpler for me to write a crude text folder than to find the
> > > code I knew already existed.



      
____________________________________________________________________________________
You rock. That's why Blockbuster's offering you one month of Blockbuster Total 
Access, No Cost.  
http://tc.deals.yahoo.com/tc/blockbuster/text5.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to