【问题标题】:Recursive Haskell function that separates a list into a pair of lists, then goes through the pair递归 Haskell 函数,将一个列表分成一对列表,然后遍历这对列表
【发布时间】:2012-11-01 09:12:43
【问题描述】:

我有一个函数,我们称它为 fct1,它获取任何列表并在一个列表中获取所有相等的一个,在第二个列表中获取所有其余的,它们在一个元组中。

data sale : ( sale string int) fct1 [sale,sale..sale] 将只返回在第一个列表中具有相同字符串且在第二个列表中具有相同字符串的销售)

号码前(更容易理解):fct1 [1,2,3,4,6,7,1,3,4]= ([1,1],[2,3,4,6,7,3,4])

我还有第二个函数,我们称之为fct2

fct2 始终应用于 fst(tuple),我需要将结果累积到一个列表中。列表将是返回值

我需要在 fst(tuple) 上应用 fct2,然后在 snd(tuple) 上应用相同的 fct1,以便它与其余部分重新创建一个元组,直到我达到 fct1 =[]

我知道我必须递归执行,只是不知道从哪里开始...fct1fct2 也是。

这是我的伪代码...

type Qty = Integer                                                        
type Product =string                                    
data Sales = Sales Product Qty`

as  is a list

fct1 = (fct1 (\(Sales product qty) -> product == product(head as)) as)
it return a tuple (list1,list2)

fct2:

fct1 需要在 snd(tuple) 上运行,所以我到达 [] as snd(tuple) 同时我需要在 fst(tuple) fct2 上运行该列表并将其汇总为一个我需要保留并累积到单个列表中的元素。

我希望这次我更明确..

找到解决方案的代码如下:

 fct2 as = accSales [] as

   where accSales n as =

            if as == []

            then sortBy compareSale n

            else let x =sumQty(fst(fct1(as)))
                     xs = snd(fct1(as)) 
                 in  accSales (x:n) xs`

【问题讨论】:

  • 我认为你应该给我们更多的例子:)(尤其是关于你最后提到的元组的东西。)
  • 另外,stop, Hoogle time!partition 听起来最有用。)
  • 我确实看过分区,但不太明白它如何应用于我的元组。事实上,我已经完成了所有需要应用的功能,我需要了解如何通过连音并用新的连音替换,直到达到 []
  • @FrédéricLacosteBienvenue:请填写您的答案作为答案并将其标记为正确。查看常见问题解答了解更多详情。现在人们正在阅读您的问题,认为您仍然需要帮助

标签: list haskell recursion tuples


【解决方案1】:
FOUND THE SOLUTION HERE IS THE CODE:

 fct2 as = accSales [] as

   where accSales n as =

            if as == []

            then sortBy compareSale n

            else let x =sumQty(fst(fct1(as)))
                     xs = snd(fct1(as)) 
                 in  accSales (x:n) xs`

【讨论】:

    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2014-03-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多