我想知道,为什么这不起作用(2错误):
removeCard cardList card e =
if length $ (filter` cardList) == (length cardList)
-- the same error
-- if length $ filter` cardList == length cardList
-- if (length $ filter` cardList) == (length cardList)
then error "The error occured"
else filter` cardList
where
filter` [] = []
filter` (x:xs) = if x == card then xs else x : filter` xs
如果我只使用类似if 1 == 2 ...
的简单表达式替换if,我会收到另一个错误:
parse error on input `where'
答案 0 :(得分:3)
请勿在名称中使用反引号来过滤素数"。改为使用单引号:
removeCard cardList card e =
if length (filter' cardList) == (length cardList)
-- the same error
-- if length $ filter' cardList == length cardList
-- if (length $ filter' cardList) == (length cardList)
then error "The error occured"
else filter' cardList
where
filter' [] = []
filter' (x:xs) = if x == card then xs else x : filter' xs
反引号用于表示非符号函数名称的中缀表示法。
答案 1 :(得分:2)
反引号(`)不是标识符中的合法字符。它们用于将普通二进制函数编写为中缀运算符,如
(== card) `filter` cardList
您可能想要使用素数(')。
removeCard cardList card e =
if length $ (filter' cardList) == (length cardList)
then error "The error occured"
else filter' cardList
where
filter' [] = []
filter' (x:xs) = if x == card then xs else x : filter' xs