[英]Return snd element of specific tuple in list of tuples Haskell
我试图返回具有与char相同的第一个元素的元组的第二个元素。
如果没有与第一个元素具有相同字符的元组,那么我想返回0
与给定的char只能有0或1个具有相同char的元组,因此采用列表推导返回的[Int]的头部。
这是我写的代码,错误是当我尝试检查元组(c, )是否在带有'elem(c, )m' 的元组列表中时
type Mem = [(Name,Int)]
getVal :: Char -> Mem -> Int
getVal c m
| elem (c,_) m = head [snd n | n <- m, fst n == c]
| otherwise = 0
我们将不胜感激地解决该问题或提出更好的解决方案的建议!
谢谢
如果您很了解Prelude ,这很简单。
import Data.Maybe (fromMaybe)
getVal :: Char -> Mem -> Int
getVal c = fromMaybe 0 . lookup c
您可以使用find
:
import Data.List
getVal :: Char -> Mem -> Int
getVal c = maybe 0 snd . find ((==)c) . fst)
elem (c,_)
不是有效的haskell表达式,因为_
只能在模式(而不是值)中使用。 您几乎可以用head [snd n | n <- m, fst n == c]
head [snd n | n <- m, fst n == c]
。 您首先应该对其进行评估,然后检查其中的内容。 这样会更简单,更安全。
我会用类似的东西
getVal :: Char -> Mem -> Int
getVal c m = case [snd n | n <- m, fst n == c] of
[] -> 0
x:_ -> x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.