Comments inline: On Wed, Mar 21, 2012 at 9:32 PM, Alexander Epifanov <[email protected]> wrote: > Hello, > > Could you please explain the followin thing: > [ns=:?10#1500 > 1225 1362 1263 1376 1445 383 1260 397 175 1188 > NB. I try to find 3digit numbers with unique digits. > I wrote this: > ns#~((((3&=@#) *. (*./@~:))@":)"0) ns > I think here are too many brackets, so I removed some > ns#~(((3&=@#*.*./@~:)@":)"0) ns > > Q1: how J understand how to split (xyz) here? How can I parse it in mind?
You can simplify this further. I would use white space to help me parse the sentence more easily (the interpreter doesn't care though) ns #~ (((3 = #) *. *./@~:)@":)"0 ns The following article on the wiki may help with understanding how to read tacit sentences. http://www.jsoftware.com/jwiki/Guides/Reading%20Tacit%20Verbs > Q2: Why I should write 3&=, but not *.&/ ? With 3&= you are binding a noun to a verb to create a new verb. With *./ the / is an adverb that automatically "binds"/modifies the verb to its left. > After that I did: > (((3=#*.*./@~:)@":)"0) ns > > Q3: It absolutely not clear for me, how can I write 3=# (explicit) > instead of 3&=@# (tacit)? (((3 = #) *. *./@~:)@":)"0 ns Note that 3&=@# isn't really tacit in the sense that you aren't using forks or hooks. However you haven't referred to the arguments because you were able to create the new verb by combining the noun and verbs using conjunctions, so in that sense it is tacit. > It is the main problem in J for me, for example I write expression: > [ns2=:i.10 > 0 1 2 3 4 5 6 7 8 9 > ns2#~-.2|ns2 NB. it looks good, no problem. > > But the problem, if I would like convert it into the function, I > should absolutely rewrite it: > > ns2#~(-.@(2&|))ns2 NB. additional Q: why 2&| in brakets? You can write this as a tacit function in a number of ways: (] #~ [: -. 2 | ]) ns2 NB. only forks (#~ [: -. 2 | ]) ns2 NB. uses hook at end (#~ [: -. 2&|) ns2 (#~ 2 -.@| ]) ns2 (#~ -.@(2&|)) ns2 You need the 2&| in brackets otherwise it is evaluated (-.@2)&| Any of these functions can be assigned to a name getEven=: (#~ 2 -.@| ]) getEven=: #~ 2 -.@| ] NB. the brackets aren't necessary for assignment > @, which is not used in normal expression, that is strange for me that > expression and function is not the same, K looks more habitually at > this point: > expression: ns2:!10; ns2@~ns2!2 > function: ns2@{~x!2} ns2 / exactly the same like expression. > > What is why it is not clear for me why J expression in explicit style > by default, but function in tacit. > > Thank you and sorry if described problem is not very clear. > -- > Regards, > Alexander. > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
