如何更新元组列表中的某个元组元素?
How to update a certain tuple element within a list of tuples?
Haskell初学者。
我有一个 (a, b)
类型的元组列表,如下所示:[(1, "One"), (2, "2")]
和一对 (key, value)
.
我想创建一个递归函数,它接受一对元组列表,所有类型 (a, b)
和 returns 在用传递的值替换与传递的键关联的所有值之后的列表:
changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]
示例输出:
> changeTup (1, "Hello") [(1, "One"), (2, "Two")]
=> [(1, "Hello"), (2, "Two")]
我做了一些挖掘,看起来最好的方法是使用 map
。我试过了,但没有得到任何好的结果。
这是我的代码:
changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]
changeTup (y,z) [] = [(y,z)]
changeTup (y,z) (x:xs) = map replace
where replace (key, value)
| y == key = (key, z)
| otherwise = (key, value)
我不确定如何在 map
内增加列表 (x:xs)
。我收到 expected type error
.
关于 map
函数的事情是遍历列表(或另一个模糊的列表形状的东西)是它的全部工作。在你的代码中,你有一个非常好的 replace
函数,你想应用到列表的元素 (x : xs)
- 这样做就像 map replace (x : xs)
[=14 一样简单=]
Haskell初学者。
我有一个 (a, b)
类型的元组列表,如下所示:[(1, "One"), (2, "2")]
和一对 (key, value)
.
我想创建一个递归函数,它接受一对元组列表,所有类型 (a, b)
和 returns 在用传递的值替换与传递的键关联的所有值之后的列表:
changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]
示例输出:
> changeTup (1, "Hello") [(1, "One"), (2, "Two")]
=> [(1, "Hello"), (2, "Two")]
我做了一些挖掘,看起来最好的方法是使用 map
。我试过了,但没有得到任何好的结果。
这是我的代码:
changeTup :: (Eq a) => (a,b) -> [(a,b)] -> [(a,b)]
changeTup (y,z) [] = [(y,z)]
changeTup (y,z) (x:xs) = map replace
where replace (key, value)
| y == key = (key, z)
| otherwise = (key, value)
我不确定如何在 map
内增加列表 (x:xs)
。我收到 expected type error
.
关于 map
函数的事情是遍历列表(或另一个模糊的列表形状的东西)是它的全部工作。在你的代码中,你有一个非常好的 replace
函数,你想应用到列表的元素 (x : xs)
- 这样做就像 map replace (x : xs)
[=14 一样简单=]