A trick for coercing x and y to the same length in

x u y

is

x u/@,: y

Works if default fill is suitable.

Henry Rich


On 4/9/2011 6:35 AM, Steven Taylor wrote:
> 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
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to