Typo: I intended that the last test be: (f -: logstar) (10^i.10) */ 100?@$0 1
(*/ instead of +/) On Mon, Jul 7, 2014 at 7:46 AM, Roger Hui <[email protected]> wrote: > f=: 1&<: + (^^:(1 2 3)1)&I. > (f -: logstar) i.20 > 1 > (f -: logstar) 3814270+i.20 > 1 > (f -: logstar) (10^i.10) +/ 100?@$0 > 1 > > If logstar(1) is redefined to be 1 instead of 0, then f=: (^^:(i.4))&I. > > > > > On Mon, Jul 7, 2014 at 7:22 AM, Roger Hui <[email protected]> > wrote: > >> In practice log* (at least for base 2) can have only a very few values, >> so something involving I. should work quite well. >> >> >> On Mon, Jul 7, 2014 at 7:19 AM, Dan Bron <[email protected]> wrote: >> >>> Iterated log, usually written as log*(n), is defined piecewise as: >>> >>> +--------------------- >>> / 0 if n<:1 >>> log*(n)= >>> \ 1+log*(log n) if n> 1 >>> +--------------------- >>> >>> This can be expressed directly in J using agenda (@.): >>> >>> logstar =: 0:`(1+$:@^.)@.(1<:])"0 >>> >>> But this feels fairly "procedural". All the work is in the recursion. Is >>> there a more elegant way to express it? >>> >>> -Dan >>> ---------------------------------------------------------------------- >>> For information about J forums see http://www.jsoftware.com/forums.htm >>> >> >> > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
