gpt4 book ai didi

haskell - 如何在Haskell中根据参数递归删除元组列表

转载 作者:行者123 更新时间:2023-12-02 18:54:27 24 4
gpt4 key购买 nike

我正在尝试编写一个带有两个参数的函数,第二个参数带有一个元组列表。如果第一个组件等于第一个参数,则这对元组将被删除。

例如 myDelete 2 [(1, 'a'), (2, 'b'), (3, 'c')] = [(1, 'a'), (3, 'c') )]

这是我尝试过的

myDelete :: Eq a => a -> [(a, b)] -> [(a, b)]
myDelete a [] = []
myDelete a ((l, r) :xs) | a==l = myDelete a xs
| otherwise = l: r:(myDelete a xs)

最佳答案

问题出在 l : r : ... 部分。您返回一个 2 元组列表。 l 的类型为 a,而 r 的类型为 b,因此您可以在列表前面添加 类型的表达式>ab,但这行不通。

您应该在列表前面添加 2 元组 (l, r):

myDelete :: Eq a => a -> [(a, b)] -> [(a, b)]
myDelete a [] = []
myDelete a ((l, r) :xs)
| a == l = myDelete a xs
| otherwise = <b>(l, r)</b>: myDelete a xs

您还可以使用 as-pattern [Haskell report]避免将 lr 包装在 2 元组中:

myDelete :: Eq a => a -> [(a, b)] -> [(a, b)]
myDelete a [] = []
myDelete a (<b>lr@</b>(l, _) :xs)
| a == l = myDelete a xs
| otherwise = <b>lr</b>: myDelete a xs

关于haskell - 如何在Haskell中根据参数递归删除元组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66342454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com