【问题标题】:Create List by multiplying object with [1..n]通过将对象与 [1..n] 相乘来创建列表
【发布时间】:2020-02-10 22:27:54
【问题描述】:

我还没有进入 Haskell,需要以下功能的提示。

我想通过添加一对的每个乘法来创建一个列表:

all :: Int -> (Int,Int) -> [(Int, Int)] 
all n, pair = ...

例如n = 3,对 (1,2) => [(1,2), (2,4), (3,6)] 扩展为 [(1*(1,2)), ((2*(1,2)), (3*(1,2))]

我知道它与x <- [1..n]x*pair 相关,但我不知道哪个内置函数适合将它们组合在一起!

【问题讨论】:

标签: list haskell


【解决方案1】:

您需要对元组中的元素分别进行乘法运算,然后重新创建一个元组。您可以使用fstsnd 来获取元素。

all n pair = [(x*(fst pair), x*(snd pair)) | x <- [1..n]]

模式匹配是访问元组元素的另一种常用方法。

all n (a, b) = [(x*a, x*b) | x <- [1..n]]

【讨论】:

  • 只是出于好奇,还有其他方法可以映射到元组:stackoverflow.com/questions/9722689/haskell-how-to-map-a-tuple
  • @Lorenzo 确实如此,感谢您指出。额外包中的both 似乎可以做到这一点。但我认为初学者自己解决这个问题是个好习惯。
  • 在这对上进行模式匹配比使用fstsnd 更好(imo,但几乎每个Haskell 开发人员都会同意)
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多