【发布时间】:2014-04-01 21:07:24
【问题描述】:
我有这段代码,它将有条件地更新(或添加)一个元组到一个元组列表中。我得到了上述错误
updateTuple :: String -> String -> Int -> [Film] -> String
updateTuple userName requestedTitle newRating ((Film title _ _ ratings):restOfFilms)
| requestedTitle == title = map (\ rating -> if rating == (userName,_) then (userName,newRating) else rating) ratings
| otherwise = updateTuple userName requestedTitle newRating restOfFilms
【问题讨论】:
-
该消息非常具有描述性:
if rating == (userName,_)中的_对我和编译器都没有意义。 -
所以我不能使用通配符?
-
@user3365968 您不能在比较中使用通配符,只有在 case 语句中的
=或->的左侧模式匹配或绑定中的<-的左侧模式匹配时.你真正应该做的是if fst rating == userName then ... -
顺便说一句,您的函数的类型签名没有意义:您将评级列表映射到元组列表,而签名声明您的函数返回
String。