2
爲什麼這是非詳盡的,不放棄元素意味着這應該最終停止?爲什麼這是一個非窮舉的搜索模式?
do_something :: [(String, String, Int)] -> String
do_something [(a, b, c)] = func(a, b, c) ++ do_something(drop 1 [(a, b, c)])
爲什麼這是非詳盡的,不放棄元素意味着這應該最終停止?爲什麼這是一個非窮舉的搜索模式?
do_something :: [(String, String, Int)] -> String
do_something [(a, b, c)] = func(a, b, c) ++ do_something(drop 1 [(a, b, c)])
你必須指定的(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)]
是一樣的只是寫[]
,所以你當前的定義等同於
他居然只給了案例有一個元素是什麼時候 - 你說什麼在這裏完全相反。 –
@DanielWagner呃,在我的腦海裏,它是「你必須給定義......」 – bheklilr
隨着修復,你得到我的upvote。 =) –