【问题标题】:List comprehension on list of tuples, haskell元组列表上的列表理解,haskell
【发布时间】:2017-10-12 01:42:10
【问题描述】:

我的函数 vector1 采用 (Double,Double,Double) 类型的元组,它应该将元组中的所有项目乘以 -1 并返回一个包含负双精度元组的列表。代码可以编译,但会无限循环。

vector1 (p,q,r)= let
  y=(p,q,r)
  y'=[(-1)*y | (y)<-y']
  in y'

【问题讨论】:

  • 带有元组的列表?你能展示一个你想要的输出示例吗?
  • 输入 (1,2,3)->输出[(-1,-2,-3)]
  • 所以vector1 (p, q, r) = [(-p, -q, -r)]?
  • 是的,我就是这个意思
  • @bubu 你好!如果您发现它有用,请不要忘记将一个问题(只有一个)标记为已接受!你从来没有做过

标签: haskell tuples list-comprehension


【解决方案1】:

您似乎是在尝试对 y 而不是 y' 进行列表理解:

vector1 (p,q,r)= let
  y=(p,q,r)
  y'=[(-1)*x | x<-y]
  in y'

但这也行不通,因为列表推导是针对列表的。不同大小的元组完全是不同的类型。由于您已经解压了(p, q, r),您可以手动将- 应用到它们中(然后无论出于何种原因将其包装在一个列表中):

vector1 (p, q, r) = [(-p, -q, -r)]

如果您想为三元组定义 map

map3 :: (a -> b) -> (a, a, a) -> (b, b, b)
map3 f (p, q, r) = (f p, f q, f r)

vector1 :: Num a => (a, a, a) -> [(a, a, a)]
vector1 = pure . map3 negate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2023-04-10
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多