> As a fellow beginner (learning for well over a year, on and off), I'll > show a way I would do it: > isAnagramOf =: -:&:(-.&' '@:/:~@:tolower)
I'd like to add some advice for J newbies: During the first two months (perhaps even two years, or two decades), resist any urge to put more than five things to the right of an =: Factor out every small sub-unit you can. That simplifies debugging A LOT. Taking the above: normalize_string =: -.&' '@:/:~@:tolower isAnagramOf =: -:&:normalize_string You certainly get the idea. As you can see, the -.&' '@:/:~@:tolower has still way more than five words (namely 8) and I'm not really sure that its author is aware that the ~ refers to not just the /: but to the whole -.&' '@:/: pipeline to its left. Again, smaller sub-units help to avoid such accidents: sort =: /:~ de_space =: -.&' ' normalize =: de_space@sort@tolower isAnagramOf =: -:&normalize Almost every time, these tiny sub-units provide something useful even beyond of the current context ("anagrams"). They are certainly easier to test/verify. It also makes reasoning about the ranks of the components easier. In consequence, it becomes easier to make an educated selection between @ vs @: or & vs &: -- much better than to stick blindly to some mysterious rule of thumb. Martin Neitzel ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm