What is the timestamp of your jqt.exe?  The stack size of
windows jqt.exe should had already increased since this February.

Сб, 19 мар 2016, Pascal Jasmin написал(а):
> to make a slightly off topic reply, this will crash J (win 64) (using the 
> definitions in replied post)
> 
> 
> vr =: ($:@v0)
> recursive2=: vr`[email protected]
> 
> recursive i.20
> 
> I can accept that I am using $: wrong, but if vr is defined as what appears 
> to be equivalent:
> 
> vr =: $:@v0
> 
> then recursive2 -: recursive (no crash)
> 
> Is there a special meaning to the parenthesized version that could be done 
> intentionally in some contexts?
> 
> 
> 
> 
> 
> ----- Original Message -----
> From: Louis de Forcrand <[email protected]>
> To: [email protected]
> Sent: Saturday, March 19, 2016 8:48 AM
> Subject: [Jprogramming] Tail recursion
> 
> Let t3 be a recursive verb equivalent to >:@(3&{.) :
> 
>    t3=: $:@}:`>:@.(3 = #)
>    (>:@(3&{.) -: t3) i.1e3
> 1
>    (>:@(3&{.) -: t3) i.1e4
> |stack error: t3
> |       (>:@(3&{.)-:t3)i.10000
>    T3=: >:@(}:^:(-.@(3 = #))^:_)
>    (>:@(3&{.) -: T3) i.1e3
> 1
>    (>:@(3&{.) -: T3) i.1e4
> 1
> 
> Most of the time (and this is the point of this post),
> 
> $:@v0`[email protected] <—> v1@(v0^:(-.@v2)^:_)
> 
> The one possible exception is if v1 returns 1 BUT v0 is equivalent
> to ] (for that particular iteration). Then the version using ^: stops,
> while the recursive version doesn't. However, the problem with the
> recursive version is the stack of course. This problem could be
> fixed if special code existed to convert the recursive version to
> an internal loop. I believe most Scheme interpreters are required
> to do this, and it's called tail recursion.
> 
> In the meantime, is there a better way to write this type of verb
> (tacitly)? Say, for example, that I'm trying to successively remove
> divisors of each number in a list (except the number itself),
> removing them in a random order. In the end I should be left with
> all the numbers which have no multiples of themselves in the list
> (right?). Problems arise however if the number in question is prime;
> the list won't be modified that iteration, and so the ^: version would
> stop there. Is there another (relatively simple) way to do this tacitly?
> For example:
> 
>    divisors=: (] #~ 0 = |~) >:@i.
>    v0=: -. }:@divisors@({~ ?@#)
>    v1=: ]
>    v2=: -.@(+./)@e. ;@:(<@}:@divisors"0)
>    recursive=: $:@v0`[email protected]
>    power=: v1@(v0^:(-.@v2)^:_)
>    recursive i.20
> 0 10 11 12 13 14 15 16 17 18 19
>    power i.20
> 0 4 5 6 8 9 10 11 12 13 14 15 16 17 18 19
> 
> Obviously power stops prematurely.
> Note that this is an extremely inefficient way to do this and is
> only for demonstration purposes.
> 
> Thanks,
> Louis
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

-- 
regards,
====================================================
GPG key 1024D/4434BAB3 2008-08-24
gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to