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

后端 未结 2 772
小蘑菇
小蘑菇 2020-12-11 17:56

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
         


        
2条回答
  •  北海茫月
    2020-12-11 18:48

    You have to enter it all in on one line, or using :{ and :} to enter multiple lines:

    > let { f 1 = 1; f x = f (x - 1) }
    

    Or

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

    When you use two let statements to define f, you are actually redefining f the second time, not adding to its definition. If you were to do

    > let x = 1
    > let x = 5
    

    Then, x would be 5, not 1. The same goes for functions. First, you define f as f 1 = 1. Next, you define f as f x = f (x - 1), which overwrites the previous definition for f.

提交回复
热议问题