Re: letrec/named let

*To*: mathgroup at smc.vnet.net*Subject*: [mg56767] Re: [mg56707] letrec/named let*From*: Daniel Roy <droy at mit.edu>*Date*: Thu, 5 May 2005 06:03:03 -0400 (EDT)*Organization*: MIT*References*: <200505040433.AAA06220@smc.vnet.net> <opsp9mdot7iz9bcq@monster.ma.dl.cox.net>*Sender*: owner-wri-mathgroup at wolfram.com

I just figured out why the suggestions I've been given fail on my test cases. Its because the sets that I am passing can have repeated digits. CompressNumericalSequence@{10,2,2,4,7,8} {5,1,1,2,3,4} Otherwise, your solution of Ordering@Ordering is MUCH faster. Unfortuantely, it gives the wrong answer on the above test. -dan On Wed, 2005-05-04 at 14:14 -0500, DrBob wrote: > I have no idea what "named let" does -- not a hell of a lot, I suspect -- but here's a simple replacement for the other routine: > > CompressNumericalSequence[s_List]:=Ordering@Ordering@s > CompressNumericalSequence@{10,2,4,7,8} > > {5,1,2,3,4} > > Bobby > > On Wed, 4 May 2005 00:33:53 -0400 (EDT), Daniel Roy <droy at mit.edu> wrote: > > > hi. i'm a lisper/schemer and i'm working with mathematica. i > > appreciate the lisp-like nature of mathematica but i can't seem to > > easily replicate some of the functionality i like which is forcing me to > > write ugly side-effect code. > > > > for instance, how do you do the equivalent of a "named let" in > > mathematica (NOTE! I know i can take the max of a list, this is just a > > simple example of a named let) > > > > (define (max-of-list lst) > > (let loop ((lst (cdr lst)) > > (best (car lst))) > > (if (null? lst) > > best > > (loop (cdr lst) > > (if (> (car lst) best) > > (car lst) > > best))))) > >(max-of-list '(1 2 3 4 5 2)) > >> 5 > > > > Here is a mathematica function to compress a sequence numerically. > > here is one attempt using functions where i pass the function to > > itself... there has to be a better way > > > > CompressNumericalSequence[S_] := Module[ > > {C = Function[{C, R, i}, > > If[i < Max[R], > > If[Length[Position[R, i]] == 0, > > C[C, (If[# > i, # - 1, #]) & /@ R, i], > > C[C, R, i + 1]], > > R]]}, > > C[C, S, 1]]; > > > > CompressNumericalSequence[{10, 2, 4, 7, 8}] > > {5, 1, 2, 3, 4} > > > > 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?)... > > > > thanks, dan > > > > > > > > > > > > > > > > >

**References**:**letrec/named let***From:*Daniel Roy <droy@mit.edu>