2013-10-07 84 views
1

我在這裏和網上搜索了一般情況,我找不到任何似乎回答此問題的東西。我只是剛剛開始在Haskell中玩一個模塊,並且我正在定義一個函數來計算數組的長度(本質上是預先存在的長度函數)。計算haskell中數組的長度 - 非窮舉模式錯誤

在我的講義的函數爲:

let len [] = 0 
let len (h:t) = 1 + len t 

這對我來說很有意義,它似乎並沒有被遺漏任何東西,我已經看到非常相似的其他地方張貼的東西,但在GHCi中它拋出了「非窮舉模式」的錯誤,我不能爲了我的生活找出原因。

任何幫助將不勝感激,謝謝

回答

5

你有什麼是兩個聲明,其中第二陰影第一。

您需要聲明len作爲一個具有兩個子句的函數。在GHCI,你可以做這樣的:

:{ 
let len [] = 0 
    len (h:t) = 1 + len t 
:} 

:{ ... :}形式讓你輸入多行的聲明,你會在*.hs文件。

GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 

Prelude> let len [] = 0 
Prelude> let len (h:t) = 1 + len t -- this shadows the earlier len 
Prelude> len [1, 2, 3] 
*** Exception: <interactive>:3:5-25: Non-exhaustive patterns in function len 
    -- exception because the new len doesn't handle an empty list 

Prelude> :{ 
Prelude| let len [] = 0 
Prelude|  len (h:t) = 1 + len t 
Prelude| :} 
Prelude> len [1, 2, 3] 
3 
Prelude>