2015-04-19 68 views
-5

錯誤:爲什麼要給我錯誤?

ERROR file:.\2.hs:6 - Syntax error in declaration (unexpected `(')

代碼:

frist (y:ys)= (y:ys) !! 0 

remove1 (y:[]) = [] 
remove1 (y:y2:ys) = if y==y2 then remove1 (y:ys) else [y2] ++ remove1 (y:ys) 

count&remove (x:xs) = length (x:xs) - length (remove1 (x:xs)) 

makepairlist [] = [] 
makepairlist l = [(count&remove l , y)] ++ makepairlist l 
+0

文件名後的':6'表示錯誤在第6行 – luqui

+0

您不能在標識符中使用'&'。用其他字符替換它。 – chi

回答

3

的原因你在這裏得到的錯誤是使用名稱count&remove的:在Haskell標識符必須是字母數字兩種(如count_and_remove符號(例如==,++等)。標識符不能包含字母數字字符和符號。

但這只是一個問題。你也可以參考第9行的y,它不涉及任何內容。而且你似乎還不完全理解模式匹配是如何在函數定義中起作用的。例如,您的first功能可以定義一樣:

first (x:xs) = x 

這本身不是很大,一方面是因爲有一個名爲head執行此標準的前奏功能,因爲它就是被稱爲一個部分功能https://wiki.haskell.org/Partial_functions)。

同一類的註釋適用於您的count&remove功能,你可以寫爲:(不需要模式匹配與(x:xs)這裏)

count_and_remove xs = length xs - length (remove1 xs) 

如果你正在尋找更多的學習資源,一個受歡迎的教程是Learn You A Haskell。您還可以在haskell-beginners mailing list上尋求幫助,或在irc.freenode.net#haskell頻道上進行對話。

相關問題