2015-04-19 67 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频道上进行对话。

相关问题