Vocabulary/ecapdot
>> << 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).