Hello Oleg;

Shouldn't it be: remove last two items, append their sum?
(apologies if this has been mentioned, I'm behind in reading posts.)

Oleg Kobchenko wrote:
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


--
------------------------------------------------------------------------
|\/| Randy A MacDonald       | APL: If you can say it, it's done.. (ram)
|/\| ramacd <at> nbnet.nb.ca |
|\ |                         | The only real problem with APL is that
BSc(Math) UNBF'83            | it is "still ahead of its time."
Sapere Aude                  |     - Morten Kromberg
Natural Born APL'er          |
-----------------------------------------------------(INTP)----{ gnat }-


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to