"Power" is a very useful conjunction. Here's some simple examples of using it:
>:10 NB. Start with the increment-by-one verb ">:" 11 >:^:99]10 NB. Now apply it 99 times to the argument "10" by using ^: 109 >:^:(99) 10 NB. Another way to distinguish the "power" arg from the arg to which it's applied. 109 >:^:(i.10) 10 NB. Vector arg to power shows intermediate results. 10 11 12 13 14 15 16 17 18 19 >:^:(25>]) 10 NB. Use verb (25>]) to control power... 11 >:^:(25>])^:_ ] 10 NB. Use with verb (25>]) "infinite" number of times 25 "Infinite" power keeps applying the verb until it converges (stops changing). So, J gives you infinite power. On Tue, Mar 4, 2014 at 10:25 AM, Raul Miller <rauldmil...@gmail.com> wrote: > It might be worthwhile taking a look at the different display forms of the > veb collatz. For example, consider the atomicrepresentation: > > 5!:1<'collatz' > ┌────────────────────────────────────────────────┐ > │┌─┬────────────────────────────────────────────┐│ > ││"│┌────────────────────────────────────┬─────┐││ > ││ ││┌──┬───────────────────────────────┐│┌─┬─┐│││ > ││ │││@.│┌───────────────┬─────────────┐│││0│0││││ > ││ │││ ││┌─┬───────────┐│┌─┬─────────┐│││└─┴─┘│││ > ││ │││ │││0│┌────┬────┐│││&│┌─────┬─┐││││ │││ > ││ │││ │││ ││cole│colo││││ ││┌─┬─┐│|│││││ │││ > ││ │││ │││ │└────┴────┘│││ │││0│2││ │││││ │││ > ││ │││ ││└─┴───────────┘││ ││└─┴─┘│ │││││ │││ > ││ │││ ││ ││ │└─────┴─┘││││ │││ > ││ │││ ││ │└─┴─────────┘│││ │││ > ││ │││ │└───────────────┴─────────────┘││ │││ > ││ ││└──┴───────────────────────────────┘│ │││ > ││ │└────────────────────────────────────┴─────┘││ > │└─┴────────────────────────────────────────────┘│ > └────────────────────────────────────────────────┘ > > > Working inwards from the outside, we see that the top level control is the > rank adverb. Its arguments are represented as a gerund and the noun 0 (the > first '0' says that this is a noun, the second is the value of the noun). > > The top level control in the gerund is the @. conjunction. And > http://www.jsoftware.com/help/dictionary/d621.htm says that the rank of @. > is determined by the rank of its right verb, which leads to your question. > But what is that right verb? > > According to the diagram, above, the right verb for @. has & as its top > level control. And according to > http://www.jsoftware.com/help/dictionary/d630n.htm the monadic rank of 2&| > is infinite. > > (Hopefully you do not consider this approach to be too tedious - or, if so, > hopefully you skipped down to the end and then read the last couple > paragraphs.) > > Thanks, > > -- > Raul > > > > On Tue, Mar 4, 2014 at 10:07 AM, Jon Hough <jgho...@outlook.com> wrote: > > > Thanks for all the replies.OK, I'm starting to understand more now. I did > > not know about agenda (@.). Well actually, I read about it in the > > jsoftware.com dictionary, but I think J is one of those things you have > > to see in action before it clicks. > > What I've gone with: > > cole =. 2&(%~) NB. even case > > colo =. (1&+)@(3&*) > > collatz =.cole`colo@.(2&|)"0 NB. Rank 0 lets us work on each element > of > > a list > > > > So my next question is how do I go about iterating this until we reach 1? > > Incidentally, it seems to me that | is rank 0 (right rank) > > http://www.jsoftware.com/help/dictionary/d230.htm Therefore I am puzzled > > why the verb collatz does not act on each rank 0 element of the noun. Why > > did I have to explicitly force its right rank to be 0? > > Regarding iterations,Bo Jacoby kindly mentioned: > > collatz=:-:&(+2&|*>:&+:) collatz ^:(i.10)17 > > 17 26 13 20 10 5 8 4 2 1 > > But I'm struggling to understand this verb. Any help explaining this > would > > be appreciated. Or help making my own collatz verb into an iterative > > function (verb). > > Regards,Jon > > > Date: Mon, 3 Mar 2014 18:59:04 -0800 > > > From: d...@shaw.ca > > > To: programm...@jsoftware.com > > > Subject: Re: [Jprogramming] Simple Number Theory > > > > > > This might be more readable - I had some bold faced characters so got > > > the extra dusting of * > > > > > > Don > > > > > > collatz=:(1 0=2|])#(3*1+]),2%~] > > > > > > collatz 4 > > > > > > 2 > > > > > > collatz 5 > > > > > > 18 > > > > > > collatz _4 > > > > > > _2 > > > > > > collatz _5 > > > > > > _12 > > > > > > > > > Test for odd/even is 2|nreturning 1 for odd and 0 for even 1 0=2|n > will > > > return 1 0 for odd and 0 1 for even > > > The (3*1+n) and n%2 terms are a two element result vector > > > > > > if odd, 1 0 # returns the odd result and if even 0 1 #returns the even > > > result. > > > > > > In this case I started with the basic (3*n+1),n%2vector and then used > > > 1 0= 2|n times this(residue is 1 for odd and 0 for even numbers) > > > the result is(1 0=2|y) # (3*1+y),y%2which works > > > I wrote this as an explicit verb s=: 13 : '(1 0=2|y)#(3*1+y),y%2' > > > and typed sto get a tacit form (1 0 = 2 | ]) # (3 * 1 + ]) , 2 %~ ] > > > generated by J > > > > > > attached collatz=:to the front and that was it. > > > > > > note that the y is replaced by ] and the y%2 is expressed using 2%~] J > > > wants the ] on the right of this operation and ~does this > > > There are other variations on this but this is the simplest I came up > > with. > > > > > > I classify myself as a beginner but I have an APL background and long > > > ago found C and relatives awkward I do think it is harder to come from > > > C/C++/Java to J than from APL to J - the thinking is different To me > > > C++ is oriented towards detailed instructions for the compiler (much of > > > this is done by the interpreter in J or APL) The problem comes first > > > in J and more times than not - use of arrays can eliminate a lot of > if's > > > and loops. > > > > > > > > > Don Kelly > > > > > > > > > On 03/03/2014 8:30 AM, Jon Hough wrote: > > > > Beginner question again.I quick task I set myself was to write ONE > > ITERATION of the Collatz function for a given positive integer. > > http://en.wikipedia.org/wiki/Collatz_conjecture > > > > > > > > So my verb is supposed to do 3*n+1 if n is odd and n/2 if n is > even.In > > a more imperative/OOE based language (C/C++/Java) I could write this in > > less than a minute. Unfortunately, I fell at the very first hurdle in J. > > > > I originally wrote my tacit verb for even ints:collatz_even =.2&(%~) > > > > collatz_even 4 > > > > 2 > > > > This works, but I had a terrible time trying to put the brackets in > > the right place. I am not sure why %~ needs to be bracketed. Won't J > parse > > %~ as dyadic and "know" that the left operand is 2? > > > > Next I tried to do the case for odd n: > > > > collatz_odd =. 1&+@(3&*) collatz_odd 3 > > > > 10 > > > > That seems to work ok.Now I am not sure how to do an if statement in > > J. In plain English I want "If n is even do collatz_even else do > > collatz_odd".The verb I wrote to test for even-ness is > > > > ones =. {:@#: NB. Finds the ones column values. 1 => odd, 0=> even > > > > 1 = ones 2 > > > > 0 > > > > So I have a test but I am not sure how to utilize this test. How > > should I go about doing:"If n is even do collatz_even else do > collatz_odd"? > > > > Thanks and regards,Jon > > > > > > > > > ---------------------------------------------------------------------- > > > > For information about J forums seehttp:// > 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 > -- Devon McCormick, CFA ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm