【问题标题】:Editing First Element in List within Tuple in Haskell在 Haskell 的元组中编辑列表中的第一个元素
【发布时间】:2015-05-05 03:08:00
【问题描述】:

我是 Haskell 的新手,请耐心等待。

是否可以删除元组中列表的第一个元素?

所以如果我们有类似的东西:

function:: [([x], y)] -> [([x], y)]

我们可以编辑列表以删除列表的第一个元素吗?所以元组像:

[([1,2,3], 4), ([5,6,7], 8), ([9,10,11,12], 13), ([14,15], 16)] 

成为

[([2,3], 4), ([6,7], 8), ([10,11,12], 13), ([15], 16)]

?

或者这是不可能的,我是否在浪费时间试图解决这个问题?

【问题讨论】:

  • 是的,这是可能的。您的类型签名本身表明这种情况是可能的。
  • 那你会如何处理这个问题?

标签: list haskell tuples


【解决方案1】:

首先编写更简单的函数([x],y) -> ([x],y)。这样的事情会起作用:

f ((x:xs), y) = (xs, y)

当列表为空时,您需要决定要做什么。一种选择是再次返回空列表:

f ([], y) = ([], y)

另一种选择是像 tail 函数那样产生错误,在这种情况下,您可以将其用于整个实现。

f (xs, y) = (tail xs, y)

接下来,您可以使用名为map 的高阶函数来获得最终函数。它的类型是(a -> b) -> [a] -> [a]。如果您将f 作为第一个参数传递,那么ab 都是([x],y)

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多