I think Brian is right, and the fix would be to replace that line with z=. <./\&.(-&iz) (>: <. (j ~: b)&[ + |.!.j_index) z
(untested) Henry Rich Jan Jacobs wrote: > Henry, > I tried this in J5.04 (changed x y into x. y.) but it returned a syntax > error (e.g. 'aap' LevDist5 'taap') > ³syntax error: LevDist5 > ³ z=.<./\&.(-&iz)( >:<.(j~:b)+|.!.j_index)z > What's wrong? > J6 works fine. > Jan. > > On Sun, Dec 20, 2009 at 5:37 PM, Henry Rich <[email protected]> wrote: > >> Well, let me give you my final version then: >> >> levdist=: 4 : 0"1 >> 'a b'=. (/: #&>)x;y >> z=. >: iz =. i.#b >> for_j. a do. >> z=. <./\&.(-&iz) (>: <. (j ~: b) + |.!.j_index) z >> end. >> {:z >> ) >> >> No way is this ever going to be a J primitive. And J does not allow >> overloading primitive names with user code. You'll have to give it a >> name and use it. >> >> I've not heard of Tanimoto distance, but we can work on that next. >> >> Henry Rich >> >> Jan Jacobs wrote: >>> Henry, >>> very good. For longer strings it is more than double so fast as the >> previous >>> version. In my test cases it even consumes less memory. >>> Is it possible to include this as a native function in J (e.g. >> overloading >>> -. or s:)? >>> Same question but now for Tanimoto distance? >>> Jan. >>> >>> >>> On 12/19/09, R.E. Boss <[email protected]> wrote: >>>> Smart analysis. Chapeau! >>>> >>>> >>>> R.E. Boss >>>> >>>> >>>> -----Oorspronkelijk bericht----- >>>> Van: [email protected] >>>> [mailto:[email protected]] Namens Henry Rich >>>> Verzonden: zaterdag 19 december 2009 3:00 >>>> Aan: Programming forum >>>> Onderwerp: [Jprogramming] Levenshtein distance >>>> >>>> I was working with R. E.'s compact implementation of the Levenshtein >>>> distance and I found an interesting equivalence: >>>> >>>> (<. >:)/\.&.|. >>>> >>>> can be replaced by >>>> >>>> (<./\@:- + ]) i...@# >>>> >>>> which uses a little more space but is quite a bit faster for large >>>> operands. So now I have the version: >>>> >>>> NB. Levenshtein distance between two strings >>>> levdist=: 4 : 0 >>>> 'a b'=. (/: #&>)x;y >>>> z=. i.>:#b >>>> for_j. a do. >>>> z=. ((<./\@:- + ]) i...@#) ((j ~: b) + }:z) ({...@] , (<. }.)) >:z >>>> end. >>>> {:z >>>> ) >>>> >>>> >>>> Henry Rich >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>>> ---------------------------------------------------------------------- >>>> For information about J forums see http://www.jsoftware.com/forums.htm >>>> >>> >>> >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > > > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
