[Haskell-cafe] Re: [Haskell] What's up with this Haskell runtime
error message:
Michael Goodrich
michael.goodrich at gmail.com
Thu Apr 6 11:25:58 EDT 2006
Thanks so much for your help. I should have made clear that I was aware that
the definitions were mutually dependent. What I was hoping was that Haskell
could solve this for me without my having to resort to effectively finessing
any sequencing considerations.
Perhaps I am really asking it to do too much.
This I thought might be reasonable since one is supposed to be achieving a
sequence-less style of programming. But this would seem to be a counter
example where I will be essentially forced to implement a sequential
processing semantic in a language environment which ostensibly would deny me
such (for my own good I understand).
Thoughts?
On 4/6/06, Garrett Mitchener <garrett.mitchener at gmail.com> wrote:
>
> I came up with a system of coloring -- you'll have to view this message as
> html to see it. You start with the input parameters -- those are green.
> Anything defined in terms of green is blue. Anything defined in terms of
> green & blue is purple. Anything defined in terms of green, blue, and
> purple is orange, etc. Then you can see the problem. So in foo, everything
> checks out, you get to orange and there's just a couple of expressions left
> and you can see that there's no loop.
>
> > -----------------------------------------------------------------------------------------------------------
> >
> >
> > foo (step,r0,mu0) = bar (
> > step,r1,r0,mu1,mu0)
> > where
> > r1 = r0-
> > step*rd
> > mu1 = mu0-step*mud
> >
> > rd = c*c*mu0
> > mud
> > = c*c/r0 - (foobar_r z)/c
> >
> > c = baz(z)
> > z = 6.378388e6-r0
> >
> > baz z | z<125 = -0.25*z+1537.5
> >
> > | otherwise = 0.0169*z+1504.1
> >
> > foobar_r z | z<125 = 0.25
> >
> > | otherwise = -0.0169
> >
> >
> But when you try coloring bar, you get this far and then we're stuck. The
> problem is clear: r depends on rdc, which depends on rd0, which depends on
> c0, which depends on z0, which depends on r. So your definition for r
> includes a loop.
>
> bar
> > (step,r2,r1,mu2,mu1) = (r,z0) : bar (step,r1,r,mu1,m)
> > where
> > r = r2
> > +2*step*rdc
> > m = mu2+2*step*mudc
> > rdc = (
> > rd2+rd1+rd0)/6
> > mudc = (mud2+mud1+mud0)/6
> >
> >
> > rd2 = c2*c2*mu2
> > mud2
> > = c2*c2/r2 - (foobar_r z2)/c2
> >
> >
> > rd1 = c1*c1*mu1
> > mud1 =
> > c1*c1/r1 - (foobar_r z1)/c1
> >
> > rd0 = c0*c0*m
> > mud0 = c0*c0/r - (foobar_r z0)/c0
> >
> >
> > c2 = baz(z2)
> >
> > c1 = baz(
> > z1)
> > c0 = baz(z0)
> >
> > z2 = 6.378388e6-r2
> > z1 = 6.378388e6
> > -r1
> > z0 = 6.378388e6-r
> >
> > main :: IO ()
> > main = do
> > print $ take 100 (foo (0.1, 6.378388e6,0))
> >
> >
> >
> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org//pipermail/haskell-cafe/attachments/20060406/b44ef18f/attachment.htm
More information about the Haskell-Cafe
mailing list