2014-01-13 68 views

回答

7

你必須指定的(String, String, Int)在你的do_something申報清單每一個案件。您必須給出傳遞給do_something的參數何時爲空或包含多個元素的定義。當你沒有指定這些情況時,編譯器不知道自動做什麼。

另一種方式來看待它是在一個函數聲明,模式匹配是一樣的使用case語句:

do_something :: [(String, String, Int)] -> String 
do_something xs = case xs where 
    [(a, b, c)] -> func (a, b, c) ++ do_something (drop 1 [(a, b, c)]) 
    -- What about the other cases? 
    -- otherwise -> ??? 

而且,在這種情況下,要好得多來指定功能

do_something (x:xs) = func x ++ do_something xs 
do_something [] = ??? 

因爲這實際上遞歸地定義了函數。表達drop 1 [(a, b, c)]是一樣的只是寫[],所以你當前的定義等同於

​​
+0

他居然只給了案例有一個元素是什麼時候 - 你說什麼在這裏完全相反。 –

+0

@DanielWagner呃,在我的腦海裏,它是「你必須給定義......」 – bheklilr

+0

隨着修復,你得到我的upvote。 =) –