Vocabulary/semidot1
>> << Down to: Dyad Back to: Vocabulary Thru to: Dictionary
u;.1 y u;._1 y u;.2 y u;._2 y SelfIntervals Adverb
Rank Infinity -- operates on x and y as a whole -- WHY IS THIS IMPORTANT?
A family of related adverbs, differing only in small details.
We will consider u;.1 y and u;.2 y separately.
See this note for the meanings of related phrases u;._1 y and u;._2 y
Definition: In what follows, an interval of items is a sequence of consecutive items of a noun.
Case: u;.1 y
This partitions y into a sequence of intervals and then applies u individually on each interval. The result of u;.1 y is the array of results from individual applications of u.
An item marking the boundary of an interval is called a fret. Each interval runs from one fret to the next (or, for the last fret, to the end of the array).
In u;.1 y the frets are those items of y that match the first item of y. In other words, the first item of y is used as a delimiter, and y is split into intervals by starting a new interval at every item of y that matches the delimiter.
Since the first item of y starts the first interval, every item of y will be in exactly one interval.
u can be any verb.
The following examples use <, which boxes each interval, and +/, which adds up the numbers in each interval.
<;.1 'a man, a plan, a canal: panama' +---+----+----+----+---+--+-----+--+--+-+ |a m|an, |a pl|an, |a c|an|al: p|an|am|a| +---+----+----+----+---+--+-----+--+--+-+
The first item is (a), so every (a) starts a new interval.
<;.1 ] 3 1 4 1 5 9 2 6 5 3 5 3 2 3 8 +-----------------+---+---+---+ |3 1 4 1 5 9 2 6 5|3 5|3 2|3 8| +-----------------+---+---+---+
Numbers work too, just as well as bytes.
+/;.1 (3 1 4 1 5 9 2 6 5 3 5 3 2 3 8) NB. () needed to split numeric list 36 8 5 11
Instead of boxing the intervals using <, we totaled the numbers.
]a =. _2 ]\ 1 1 1 0 0 1 1 1 2 0 1 1 1 1 2 3 NB. An 8x2 table 1 1 1 0 0 1 1 1 2 0 1 1 1 1 2 3 <;.1 a +---+---+---+---+ |1 1|1 1|1 1|1 1| |1 0|2 0| |2 3| |0 1| | | | +---+---+---+---+
The items of a table are lists (i. e. rows). A new interval starts with each occurrence of a match with the first item, 1 1.
Case u;.2 y
This is like u;.1 y, except that the frets are those items that match the last item of y, and they are used to mark the end of an interval:
<;.2 'a man, a plan, a canal: panama' +-+---+----+----+----+---+--+-----+--+--+ |a| ma|n, a| pla|n, a| ca|na|l: pa|na|ma| +-+---+----+----+----+---+--+-----+--+--+ <;.2 (3 1 4 1 5 9 2 6 5 3 5 3 2 3 8) NB. Only one 8, so all one interval +-----------------------------+ |3 1 4 1 5 9 2 6 5 3 5 3 2 3 8| +-----------------------------+
Note: u;._1 and u;._2 are like u;.1 and u;.2 respectively, except that the frets are removed from the intervals before u is applied:
<;._1 'a man, a plan, a canal: panama' +--+---+---+---+--+-+----+-+-++ | m|n, | pl|n, | c|n|l: p|n|m|| +--+---+---+---+--+-+----+-+-++ <;._2 'a man, a plan, a canal: panama' ++--+---+---+---+--+-+----+-+-+ || m|n, | pl|n, | c|n|l: p|n|m| ++--+---+---+---+--+-+----+-+-+
Note that when n is negative, u may be applied to an empty array, if the interval contained only one item.
Summary of the meaning of n in u;.n y n Meaning 1 or _1 First item is delimiter, interval starts with fret 2 or _2 Last item is delimiter, interval ends with fret positive Fret is included in interval negative Fret is deleted from interval
Common uses
1. To cut a string y into a list of boxed substrings at some chosen delimiter, e.g. Space (' ')
y=: 'alpha bravo charlie' (<;._1) ' ',y +-----+-----+-------+ |alpha|bravo|charlie| +-----+-----+-------+
Note that we had to add a space at the beginning to make sure we started with the right delimiter, and that we used the ;._1 form to remove the space from the resulting word.
Compare this with the action of Words (;:) which uses J's rules for recognizing words: much different from looking for spaces:
y=: 'Fine, easy as 1 2 3?' ;: y +----+-+----+--+-----+-+ |Fine|,|easy|as|1 2 3|?| +----+-+----+--+-----+-+ (<;._1) ' ',y +-----+----+--+-+-+--+ |Fine,|easy|as|1|2|3?| +-----+----+--+-+-+--+
But for string contents known to contain no punctuation or number sequences, you might find (;:) handier to use.
2. u;._2 is often used to split a text file into lines, where each line is ended by a linefeed (LF)
a =. 1!:1 <'C:\J\bin\profilex.ijs' NB. Read in a text file $a 886 a NB. Display it. It's a list of lines separated by LF NB. profilex.ijs template NB. copy template to profilex and edit as required ... <;._2 a,LF NB. Use LF as delimiter, and split to lines +--------------------------+---------------------------------------- |NB. profilex.ijs template |NB. copy template to profilex and edit... +--------------------------+----------------------------------------
3. The result of 0 : 0 is like a text file: a list of characters, with lines separated by LF.
n =: 0 : 0 NB. Define a multiline noun Line 1 Line 2 ) $n NB. It's a list... 14 <;._2 n NB. ...with LF at the end of each line +------+------+ |Line 1|Line 2| +------+------+
When you need to define a large data array, consider using 0 : 0 to write the lines, and then u;._2 to process each line. Common choices of u are < to create a list of lines, or ". to execute each line, or <@;: to convert each line to a boxed list of words.
]listofnames =: <;._2 (0 : 0) NB. Names read from a file; box each line Alicia Alex Jo Fran ) +------+----+--+----+ |Alicia|Alex|Jo|Fran| +------+----+--+----+ ]name_zip =: ".;._2 (0 : 0) NB. name and zipcode; execute each line 'John Bull' ; 'W1' 'John Q. Public' ; 27607 'Tanaka-san' ; 6038134 ) +--------------+-------+ |John Bull |W1 | +--------------+-------+ |John Q. Public|27607 | +--------------+-------+ |Tanaka-san |6038134| +--------------+-------+ ]colors =: <@;:;._2 (0 : 0) NB. box each list of words red burgundy maroon vermilion green emerald jade blue teal cerulean ) +-------------------------------+--------------------+--------------------+ |+---+--------+------+---------+|+-----+-------+----+|+----+----+--------+| ||red|burgundy|maroon|vermilion|||green|emerald|jade|||blue|teal|cerulean|| |+---+--------+------+---------+|+-----+-------+----+|+----+----+--------+| +-------------------------------+--------------------+--------------------+
Details
1. Each interval has the same rank as y.
2. If u is applied to an empty argument (because the interval contained only the fret, which was deleted before applying u), then u is applied to 0 $ y. This is analogous to execution on a fill-cell.
0 $ y is an array with 0 items (each of which has the rank of an item of y).
3. u may be a cyclic gerund.
Use These Combinations
Combinations using ;.1-2 y that have exceptionally good performance are shown in Intervals.
x u;.1 y x u;._1 y x u;.2 y x u;._2 y Intervals Adverb
Rank 1 _ -- operates on lists of x and the entirety of y, with replication of atomic x -- WHY IS THIS IMPORTANT?
A family of related adverbs, differing only in small details.
Before reading about x u;.n y make sure you understand the operation of u;.n y
We will consider x u;.1 y and x u;.2 y separately.
See this note for the meanings of related phrases x u;._1 y and x u;._2 y
Definition: In what follows, an interval of items is a sequence of consecutive items of a noun.
Case: x u;.1 y
This partitions y into a sequence of intervals and then applies u individually on each interval. The frets of y, that is the starting points of intervals, are the items of y corresponding to 1s in the Boolean list x.
The result of x u;.1 y is the array of results from individual applications of u
1 0 1 0 0 <;.1 'abcde' +--+---+ |ab|cde| +--+---+
Items of y before the first fret are not part of any interval and are not used:
0 1 0 0 1 <;.1 'abcde' +---+-+ |bcd|e| +---+-+
Case: x u;.2 y
This is like x u;.1 y , except that the intervals end at frets
1 0 1 0 0 <;.2 'abcde' +-+--+ |a|bc| +-+--+ 0 1 0 0 1 <;.2 'abcde' +--+---+ |ab|cde| +--+---+
Note: u;._1 and u;._2 are like u;.1 and u;.2 respectively, except that the frets are removed from the intervals before u is applied
1 0 1 0 0 <;._1 'abcde' +-+--+ |b|de| +-+--+ 1 0 1 0 0 <;._2 'abcde' ++-+ ||b| ++-+
Summary of the meaning of n in x u;.n y n Meaning 1 or _1 Interval starts with fret 2 or _2 Interval ends with fret positive Fret is included in interval negative Fret is deleted from interval
Multidimensional Intervals Using Boxed x
If x is a list of boxes, the operation is generalized from intervals of items to subarrays. Each box of x contains the frets for a single axis starting with the first.
Each axis is partitioned using its frets according to the rules of u;.n. u is applied to each subarray, and the results are collected
]a =. 4 4 $ 'abcdefghijklmnop' abcd efgh ijkl mnop (1 0 0 1;0 1 0 1) <;.1 a +--+-+ |bc|d| |fg|h| |jk|l| +--+-+ |no|p| +--+-+
An axis corresponding to an empty box in x, or an axis beyond the length of x,
is taken in full and does not produce an axis of the partitioning.
Exception: If the axis of y corresponding to the empty box has length 0, the 0-length axis remains in the partitioning.
]a =. (1 0 0;1 0 1) <;.1 i. 3 3 +---+-+ |0 1|2| |3 4|5| |6 7|8| +---+-+ $a 1 2 ]b =. ('';1 0 1) <;.1 i. 3 3 +---+-+ |0 1|2| |3 4|5| |6 7|8| +---+-+ $b 2
The partitioning to create b does not have an axis corresponding to the empty box.
Common Uses
1. x u;.n y is a workhorse for acting on intervals of a noun. To cut text into English sentences (ending with "." and two spaces)
'. ' E. text NB. Find ends-of-sentence 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 ('. ' E. text) <;.2 text +----------------+-------------------+------------+ |I saw Mr. Jones.| Mr. Jones saw me.| We waited.| +----------------+-------------------+------------+
2. To add up intervals of ascending numbers in a list
list =. 3 1 4 1 5 9 2 6 5 3 5 8 9 7 9 NB. a list ]ascendingstarts =. 1 , 2 >/\ list NB. places where the list starts an ascending sequence 1 1 0 1 0 0 1 0 1 1 0 0 0 1 0 ascendingstarts <;.1 list NB. The ascending sequences +-+---+-----+---+-+-------+---+ |3|1 4|1 5 9|2 6|5|3 5 8 9|7 9| +-+---+-----+---+-+-------+---+ ascendingstarts +/;.1 list NB. Totals of the ascending sequences 3 5 15 8 5 25 16
3. To split a matrix into block matrix form
(1 0 0 1;1 0 1 0 0) <;.1 i.4 5 +-----+--------+ | 0 1| 2 3 4| | 5 6| 7 8 9| |10 11|12 13 14| +-----+--------+ |15 16|17 18 19| +-----+--------+
Details
1. Each interval has the same rank as y.
2. If u is applied to an empty argument (because the interval contained only the fret, which was deleted before applying u), u is applied to 0 $ y. This is analogous to execution on a fill-cell.
Phrase 0 $ y is an array with 0 items (each of which has the rank of an item of y).
3. If y has no intervals (because x is all zero), the result is 0 $ ,: u 0 $ y . This is analogous to execution on a fill-cell.
Phrase 0 $ y is an array with 0 items (each of which has the rank of an item of y), and the final 0 $ ,: prepends a leading axis of 0 length.
4. u may be a cyclic gerund.
5. If x is a scalar, it is replicated and used for each item of y.
Oddities
1. If x is empty and y has items, the result is u y .
2. If x is empty and y has no items, the result is 0 $ ,: u y .
3. If x is boxed, the same principle applies: an empty box in x means that the corresponding axis is taken in full and does not produce an axis in the result., except when the axis has length 0.
Use These Combinations
Combinations using x ;.1-2 y that have exceptionally good performance are shown in Intervals.