为什么给我错误?

时间:2015-04-19 06:49:14

标签: haskell

错误:

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

1 个答案:

答案 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频道中进行对话。