[erlang-questions] newbie question of if guards
Hal Snyder
<>
Mon Dec 11 03:02:01 CET 2006
...
Sqrt_Iter =
fun (Guess,G) ->
case (Good_Enough(Guess)) of
true -> Guess;
false -> G(Improve(Guess),G)
end
end,
Sqrt_Iter(1.0, Sqrt_Iter).
On Dec 10, 2006, at 6:37 PM, Chris Rathman wrote:
> Thanks for the answers (from Mathias and Kostis)! That gets me
> further
> along.
>
> As long as I'm asking annoying newbie questions and I'm on the
> pedagogic
> subject of square roots.... :-)
>
> I'm trying to figure out the way Erlang does nested functions. From
> what I gather, anonymous functions would be the way to go.
> Unfortunately, I can't figure out how to make the lambda functions be
> recursive, and searches for 'Erlang' and 'fun' don't narrow it down
> enough. Here's what I am trying to do:
>
> sqrt(X) ->
> Good_Enough =
> fun (Guess) ->
> abs(square(Guess) - X) < 0.001
> end,
>
> Improve =
> fun (Guess) ->
> average(Guess, X / Guess)
> end,
>
> Sqrt_Iter =
> fun (Guess) ->
> case (Good_Enough(Guess)) of
> true -> Guess;
> false -> Sqrt_Iter(Improve(Guess))
> end
> end,
>
> Sqrt_Iter(1.0, X).
>
> The recursive call in Sqrt_Iter gives me an error informing me that it
> is unbound. I can understand why it is unbound, but I was
> wondering if
> there's something similar to CaML's 'rec' modifier? Or is there
> another
> Erlang idiom for achieving this effect?
>
> Thanks,
> Chris Rathman
>
> Matthias Lang wrote:
>> Erlang does not allow calling arbitrary functions from guards.
>>
>> One way to achieve what you're attempting below is to use 'case'
>> instead:
>> ....
More information about the erlang-questions
mailing list