Hi,

as an exercise, I decided to make a simple "like" operator

like=:([:*./([=])+.('?'E.]))
NB. in english: get membership flags where '?' is in the set y
NB. OR that with the comparison flags
NB. *./ insert-AND to get the result

the problem with this "like" operator is that x and y portions must be the
same length.  For example:
    'abcaabc' like 'abc?abc'
  1
    'Abcaabc' like 'abc?abc'
  0
    'abcaabc' like 'abc?ab'
  |length error --- NB. fair enough that's how equals '=' is defined

Is there an easy way to do guard conditionally, but to do this tacitly? i.e.
the lengths are different, so return fail/zero?
ideas so far:
* email the list without fully exploring the possibilities ;)
* look at J's regex library (did this a little)
* implement something like "stretch=: [$],($,:@{:)" but with an unlikely
non-ASCII character  (hack so *bad*).
* convert characters to numbers.  move elements to a 2D array pre-filled
with null whose right bound is the max of #x,#y (i.e. >/ (#x,#y).  Continue
on from there.  create various verbs + flatten it afterwards to get tacit
version.  (not done yet).

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

Reply via email to