fixed point

Dean Herington heringto at cs.unc.edu
Sat Nov 1 01:25:31 EST 2003


At 11:15 AM -0500 2003/10/31, Harris, Andrew wrote:
> Hi -
> 	I am trying to work out how the following function using "fix" is
> evaluated.  I am hoping someone could look at my step-by-step breakdown 
> of how I think evaluation works and see if I'm correct.  My main 
> question is how the order of operation (fixity?) is understood in going 
> from step [3] to [4], if this is indeed how the evaluation would take 
> place.
>
> 	Any help is appreciated,
> -andrew
>
> Here's the Haskell function:
>
> ---
> fix f = f (fix f)
>
> wierdFunc2 x y z = if y - z > z then x (y-z) z
>                    else y - z
>
> myRemainder = fix wierdFunc2
> ---
>
> Here's my "evaluation":

You're pretty close.  I've noted a couple of differences below.

> myRemainder 12 5		-- [1]
> =
> fix wierdFunc2 12 5	-- [2] by substitution
> =
> wierdFunc2 fix wierdFunc2 12 5	-- [3] apply "fix"

wierdfunc2 (fix wierdFunc2) 12 5

> =
> wierdFunc2 myRemainder 12 5		-- [4] by substitution (?)

No, equations "rewrite" only "from left to right".  Skip the step above 
and the step below.

> =
> myRemainder 7 5				-- [5] apply "wierdFunc2"
> =
> fix wierdFunc2 7 5	-- [6] by substitution
> =
> wierdFunc2 fix wierdFunc2 7 5	-- [7] apply "fix"

Similarly, the above needs (fix wierdFunc2) to be parenthesized.

> =
> wierdFunc2 myRemainder 7 5		-- [8] by substitution (?)

Skip the above step.

> =
> 2	-- [9] apply "wierdFunc2"


Dean




More information about the Haskell-Cafe mailing list