2012-09-25 48 views
1

我是新來透析器,和我希望的它是由回答這個問題操作時有人能夠給我一個快速的想法。爲什麼透析器找到我的類型說明無效?

我認爲下面的函數,給定一個數X和一個非負整數n,將產生一個數字。 (X到N次方)

-spec pow(X :: number(), N :: non_neg_integer) -> number(). 
pow(X, N) -> 
    pow(X, N, 1). 
pow(_X, 0, R) -> 
    R; 
pow(X, N, R) -> 
    pow(X*X, 
     N bsr 1, 
     if 
      N band 1 =:= 0 -> 
       R; 
      true -> 
       X*R 
     end). 

但透析器不喜歡我的規範。它告訴我:

Invalid type specification for function t:pow/2. 
The success typing is (_,integer()) -> any() 

它對我來說似乎是一個過度包容的規範。有人可以解釋爲什麼這樣做,是否有任何方法可以接受更嚴格的型號規格?

回答

8

我相信這是因爲你寫non_neg_integer代替non_neg_integer()。

+0

葉氏。沒有括號的'non_neg_integer'只是一個原子。 – aronisstav

+0

那很簡單吧?謝謝,這是擺脫我不明白的級聯錯誤的第一步。 – njlarsson

相關問題