       Re: letrec/named let

• To: mathgroup at smc.vnet.net
• Subject: [mg56753] Re: letrec/named let
• From: Daniel Roy <droy at mit.edu>
• Date: Thu, 5 May 2005 06:01:34 -0400 (EDT)
• Organization: MIT
• Sender: owner-wri-mathgroup at wolfram.com

```> You always give C as first argument; so it is superflous.
> Pleas note, that C is reserved:
> "C[i] is the default form for the ith parameter or constant
> generated in representing the results of various symbolic
> computations."
>
> CompressNumericalSequence[S_]:=
>     Module[{fC},
>       fC=Function[{R,i},
>           If[i<Max[R],
>             If[Length[Position[R,i]]==0,
>               fC[(If[#>i,#-1,#])&/@R,i],
>               fC[R,i+1]],R]];
>       fC[S,1]];
>
> but this will fail for big numbers unless you set \$IterationLimit
> appropriate. Hence,

I'm not so sure this is true.  This function is tail-recursive.  Does
mathematica handle tail recursion properly?

>
> CNS[lst_] := lst /. (Thread[#1 -> Ordering[Ordering[#1]]] & )[
>      Module[{f}, f[x_] := (f[x] = Sequence[]; x); f /@ lst]];
>
> or even better
>
> CNS[lst_] := Module[{tmp = First /@ Split[Sort[lst]]},
>    Flatten[(Position[tmp, #1] & ) /@ lst]]
>
> would do the task more reliable (and much more faster).

Neither of these functions do what CompressNumericalSequence does... And
because I'm no mathematica-guru I don't yet quite understand what they
do, anyway.  Furthermore, they are actually SLOWER than my code (see
below on a test of 1,000,000 entries).

> > Also, is it possible to do letrec in mathematica?  (essentially, i know
> > i can do recursive function declarations at the top level... my question
> > is whether i can do them at lower levels?)...

> Regards,
> Peter

dan

```

• Prev by Date: Re: named pattern variable scoped as global, should be local
• Next by Date: Re: Cases and Nonatomic expression
• Previous by thread: Re: letrec/named let
• Next by thread: Re: letrec/named let