Vocabulary/ecapdot

From J Wiki
Jump to: navigation, search

>> <<   Down to: Dyad   Back to: Vocabulary Thru to: Dictionary

x E. y Find Matches

Rank Infinity -- operates on x and y as a whole -- WHY IS THIS IMPORTANT?



Create a Boolean array indicating starting points in y of subarrays equal to x.

If x and y are character lists, this array marks the starts of the matching substrings in y

   'co' E. 'cocoa'
1 0 1 0 0

Common uses

1. Find the positions of all matching substrings

   'co' I.@:E. 'cocoa'
0 2

2. To test whether a string x appears in the string y

   'he' +./@:E. 'boustrophedonic'
1

3. Find positions in y that match subarray x

   ]y =: 4 4 $ 'abcdefghijklmnop'  NB. An array
abcd
efgh
ijkl
mnop
   ]x =: 2 2 $ 'fgjk'              NB. Another array
fg
jk
   x E. y                          NB. Do any subarrays of `y` match `x`?
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0

More Information

1. The result of  x E. y has the same shape as y.

2. If x is an atom and y is a list, x is treated as a 1-atom list. Apart from that exception, x must have the same rank as y.

3. The result, at each atom of y, is 1 if a subarray of y starting at that position matches x.

4. If a position is too close to the end of y to have room for a subarray with the shape of x, that is simply recorded as a non-match.

   y                  NB. A 2x2 array
abcd
efgh
ijkl
mnop
   'bcd' E. y         NB. Rank of x must equal rank of y
|rank error
   (,:'bcd') E. y     NB. Better
0 1 0 0
0 0 0 0
0 0 0 0
0 0 0 0
   (,:'abcde') E. y   NB. x too big: no matches anywhere
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

5. x E. y uses tolerant comparison. Use  E.!.0 in place of  E. for exact comparison.

6. If x and y are character lists,  x E. y uses the Boyer-Moore algorithm.


Known Bug

1. Warning: E. and the special forms u@:E. corrupt the J session if x and y are integer lists.


Use These Combinations

Combinations using x E. y that have exceptionally good performance are shown in Searching and Matching Items: Fast List Operations (FLOs).