【问题标题】:Can anyone tell me how to give to lists as arguments to a function in Haskell? (type declaration)谁能告诉我如何将列表作为参数提供给 Haskell 中的函数? (类型声明)
【发布时间】:2016-11-25 16:44:54
【问题描述】:

我想编写一个函数,它获取两个列表并将它们融合到一个列表中,但顺序相反,因此 [1,2,3] 和 [4,5,6] 变为 [4,5,6,1, 2,3] 而且我有点卡在类型声明中......

【问题讨论】:

  • 另外,stackoverflow 告诉我不要发布该评论,而只是投反对票。真的很好,所以。
  • 是的,谢谢,downvoting 是解决方案... *****
  • 已经尝试过 [a] [a] -> [a] 和其他一些不可能的东西
  • 好吧,如果作为新手被否决感觉不好,很抱歉,但是您发布这个问题的方式并不好。 StackOverflow 期望自己在解决问题方面付出一些努力。
  • "它只是没有任何帮助" -- 否决的主要目标不是帮助提问者,而是通过鼓励人们提出更好的问题和提出被否决的问题来改善网站的内容可用于进一步的审核机制。也就是说,您可能会发现这些反馈对您准备未来的问题很有用。

标签: list function haskell


【解决方案1】:

让我们告诉你我对 haskell 的看法 因此,让我们首先考虑类型。您有 2 个列表,并返回这些列表。在类型语言中,它看起来像这样:[a] -> [a] -> [a]

一旦你知道类型,你可以问 hoogle:https://www.haskell.org/hoogle/,它应该会给你你需要的一切:)

【讨论】:

    【解决方案2】:

    让我们看看……

    您的函数有两个参数:list1list2。 您的函数的结果是相同类型的列表。这意味着您的函数正在处理三个列表。其中两个是参数,第三个是结果。

    为简单起见,假设您正在处理Integers 的列表。类型声明如下所示:

    fuse :: [Int] -> -- The first list
            [Int] -> -- The second list
            [Int]    -- The result fusion
    

    其中[Int] 表示Integers 的列表。当然,函数不必是Integers 的列表。它可以应用于包含任何类型元素的列表:

    fuse :: [a] -> -- The first list
            [a] -> -- The second list
            [a]    -- The result of the fusion
    

    Hoogle 上快速搜索[a] -> [a] -> [a] 将得到(++) 函数作为顶部结果:

    (++) :: [a] -> [a] -> [a]
    

    此函数附加两个列表。在你的情况下,你可以使用这样的功能:

    fuse :: [a] -> -- The first list
            [a] -> -- The second list
            [a]    -- The result
    fuse list1 list2 = list2 ++ list1
    

    或无点风格:

    fuse :: [Int] -> -- The first list
            [Int] -> -- The second list
            [Int]    -- The result
    fuse = flip (++)
    

    翻转函数反转参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-30
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      相关资源
      最近更新 更多