Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
845 views
in Technique[技术] by (71.8m points)

haskell - It works when loaded from file, but not when typed into ghci. Why?

If I put the following 2 lines into foobar.hs

f 1 = 1
f x = f (x-1)

then

$ ghci
> :load foobar.hs
> f 5
1

but if I do

$ ghci
> let f 1 = 1
> let f x = f (x-1)
> f 5
^CInterrupted.

then it does not return. Why?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The latter binding overrides the former. Use this in ghci:

Prelude> :{
Prelude| let f 1 = 1
Prelude|     f x = f (x-1)
Prelude| :}
Prelude> f 5
1

Or, without the layout:

Prelude> let f 1 = 1; f x = f (x-1)
Prelude> f 5
1

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...