Mike
Mike

Reputation: 229

Infinite loop in haskell?

I thought this would produce a factorial function...

(within ghci)

Prelude> let ft 0 = 1
Prelude> let ft n = n * ft (n - 1)
Prelude> ft 5

(hangs indefinitely, until ^C).

Upvotes: 22

Views: 1327

Answers (1)

sth
sth

Reputation: 229593

The two separate let statements are interpreted independently from each other. First a function ft 0 = 1 is defined, and then a new function ft n = n * ft (n - 1) is defined, overwriting the first definition.

To define one function with two cases you have to put both cases into a single let statement. To do this in a single line at the GHCI prompt you can separate the two cases by ;:

Prelude> let ft 0 = 1; ft n = n * ft (n - 1)
Prelude> ft 5
120

Upvotes: 32

Related Questions