On 07/20/2014 10:50 PM, Walter Bright wrote:
On 7/20/2014 3:27 AM, Dmitry Olshansky wrote:
Functional programming is full of simple recursion and it would be
nice not to
stack overflow in debug builds.

Traditional FP languages don't have loops, and so must do recursion.

Uh...

D has loops, even in pure functions,

So does Haskell.

import Control.Monad
import Control.Monad.ST
import Data.STRef

factorial :: Integer -> Integer
factorial n = runST $ do
  r <- newSTRef 1
  forM_ [1..n] $ \i->
    modifySTRef r (*i)
  readSTRef r

main = print $ factorial 5 -- "120"


there's no reason not to use them.
...

But of course there are reasons to use tail calls.

Reply via email to