【问题标题】:Haskell beginner question, set up pairs in definitionHaskell初学者问题,在定义中设置对
【发布时间】:2020-02-14 05:47:03
【问题描述】:

所以我真的是 Haskell 的新手,并且有一个定义叫做:

 x :: [(char,Int)]

x 需要被定义为一个函数,它只是将字符 (x,y,z)(1,2,3) 以各种方式放在一起。

所以当我调用x 时,我只想得到[x,1], [x,2], [x,3], [y,1], [y,2] 的输出等等。

可能是一些简单的问题,但我很困惑x 函数中没有实际输入。它只需要输出列表。

我已尝试创建两个列表(数字和字符列表),但如何将它们放在函数中?

【问题讨论】:

  • 提示:使用列表理解;)如果你失败了,用你的疑问编辑这个问题
  • 好的,我知道了,谢谢你的提示:D
  • 想想你的函数 x。你说它没有输入,但它从哪里得到你想要组合的元组(或列表?)?请注意,您不能在这里互换使用括号和方括号,所以我不能 100% 确定您正在寻找什么。也许一个函数需要两个 LISTS 并产生一个 LIST 对(即 2 元组列表)?我假设您不想完全使用字符 x、y、z 和 1、2、3,而是使用更灵活的字符(例如,任何两个大小相等的列表?)。
  • x :: [(Char, Int)] 不是一个定义;这是一个类型注释。此外,x 不是一个函数,而是一个元组列表。采用字符列表[Char] 和整数列表[Int] 来生成具有相同类型x 的函数的函数将具有[Char] -> [Int] -> [(Char, Int)] 类型。你的工作是定义一些函数foo :: [Char] -> [Int] -> [(Char, Int)]
  • @Willem 更正的是答案,而不是问题。 :) 我认为您的编辑应该回滚。

标签: list haskell combinations cartesian-product


【解决方案1】:

x 不是函数;这是一个元组列表。您可以直接定义它,也可以定义foo :: [Char] -> [Int] -> [(Char, Int)] 类型的函数,然后通过调用foo 和两个适当的列表来设置x

foo :: [Char] -> [Int] -> [(Char, Int)]
foo chars ints = ...  -- You define this

x :: [(Char, Int)]
x = foo ['x', 'y', 'z'] [1, 2, 3]

至于你如何定义foo,我建议你先阅读list comprehensions。它们不是定义foo 的唯一方法,但它们可能是最简单的。如果您熟悉 Python 之类的语言中的列表推导式,那么您应该没有问题; Haskell 是 Python 产生这个想法的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2013-05-02
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    相关资源
    最近更新 更多