MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

letrec/named let

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56707] letrec/named let
  • From: Daniel Roy <droy at mit.edu>
  • Date: Wed, 4 May 2005 00:33:53 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

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





  • Prev by Date: Re: Re: Summation problem
  • Next by Date: Re: Problems with eps format
  • Previous by thread: Re: changing algorithm, finding residuals w/FindFit
  • Next by thread: Re: letrec/named let