繁体   English   中英

返回元组列表中特定元组的snd元素Haskell

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM