错误:
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 :(得分:3)
您在此处遇到错误的原因是使用名称count&remove
:Haskell中的标识符必须是字母数字(例如count_and_remove
)或符号(例如==
,++
等)。标识符不能包含字母数字字符和符号。
但那只是一个问题。您还可以在第9行引用y
,但不引用任何内容。您似乎还不太了解模式匹配在函数定义中的工作原理。例如,您的first
函数可以定义为:
first (x:xs) = x
这本身并不是很好,因为有一个名为head
的标准前奏函数可以做到这一点,并且因为它是什么叫做部分功能(https://wiki.haskell.org/Partial_functions)。
同样的评论适用于您的count&remove
函数,您可以将其写为:
count_and_remove xs = length xs - length (remove1 xs)
(此处无需与(x:xs)
进行模式匹配。)
如果您正在寻找更多学习资源,一个受欢迎的教程是Learn You A Haskell。您也可以在haskell-beginners mailing list上寻求帮助,或在irc.freenode.net #haskell
频道中进行对话。