List Haskell-递归检查关联列表的元素
假设我有以下关联列表:List Haskell-递归检查关联列表的元素,list,haskell,recursion,tuples,List,Haskell,Recursion,Tuples,假设我有以下关联列表: names = [(6548712, "Charlie Brown"), (27378912, "Linux Van Pelt"), (5831457, "Peppermint Patty")] 我想检查给定的元组,例如 (6548712, "Charlie Brown") …存在于关联列表中 以下是我的功能: check :: (String,a) -> [(String,a)] -> Bool check val (x:xs) | x ==
names = [(6548712, "Charlie Brown"), (27378912, "Linux Van Pelt"), (5831457, "Peppermint Patty")]
我想检查给定的元组,例如
(6548712, "Charlie Brown")
…存在于关联列表中
以下是我的功能:
check :: (String,a) -> [(String,a)] -> Bool
check val (x:xs)
| x == val = True
| otherwise = check val xs
该函数不起作用。我认为错误在于我的第一个防范措施,因为我确实相信我的递归调用是正确的。我希望能够使用递归实现这一点,有人能帮我吗
check :: (Int, String) -> [(Int, String)] -> Bool
check val [] = False
check :: (Int, String) -> [(Int, String)] -> Bool
check val [] = False
check val (x:xs)
| x == val = True
| otherwise = check val xs
Prelude> elem (6548712, "Charlie Brown") [(6548712, "Charlie Brown"), (27378912, "Linux Van Pelt"), (5831457, "Peppermint Patty")]
True
这意味着如果列表为空(选中所有元素),则返回False
check val [] = False
check :: (Int, String) -> [(Int, String)] -> Bool
check val [] = False
check val (x:xs)
| x == val = True
| otherwise = check val xs
Prelude> elem (6548712, "Charlie Brown") [(6548712, "Charlie Brown"), (27378912, "Linux Van Pelt"), (5831457, "Peppermint Patty")]
True
实际上,您可以通过执行以下操作使函数具有多态性
check :: Eq a => (a, String) -> [(a, String)] -> Bool
要了解更多关于等式a的信息,请查看
为了完成,您可以始终使用函数,如下所示
check val [] = False
check :: (Int, String) -> [(Int, String)] -> Bool
check val [] = False
check val (x:xs)
| x == val = True
| otherwise = check val xs
Prelude> elem (6548712, "Charlie Brown") [(6548712, "Charlie Brown"), (27378912, "Linux Van Pelt"), (5831457, "Peppermint Patty")]
True
此外,函数可以更多态。它可以更简洁:
check::Eq a=>a->[a]->Bool
:)@Sibi对,但这看起来更清晰易懂,对吗?:)我同意这一点