【发布时间】:2018-11-28 19:18:56
【问题描述】:
[(3,9),(4,16),(5,25)] 4 = 16
我使用 map (\(x,y ) -> x) [(3,9),(4,16),(5,25)] 来获取每个元素的 fst,然后将其过滤以匹配 - 但我在制作第一件作品时遇到了错误:
findTup :: Rel -> Int -> Int
findTup rs a = map (\(x,y ) -> x) rs
- 无法将预期类型“Int”与实际类型“[Int]”匹配
- 在表达式中:map (\ (x, y) -> x) rs
有什么方法可以使 map 在 Int -> Int 的元组上工作?
【问题讨论】:
-
你可能想要
lookup :: Eq a => a -> [(a, b)] -> Maybe b。 -
目前,您只得到
map返回的[Int]值,但您已经声明findTup将返回Int,而不是[Int]。 -
\(x,y) -> x已定义为fst。 -
您可能会发现删除
findTup的类型签名并看看会发生什么很有趣。如果它编译,推断什么类型?如果它不编译,错误如何变化?您对结果感到惊讶吗? -
首先,在检查元组之前,如果找不到匹配项,您是否决定了答案?
标签: haskell