递归Haskell函数,将列表分成一对列表,然后通过该对

时间:2012-11-12 22:01:01

标签: list haskell recursion tuples

我有一个函数,让我们调用它fct1,它可以获取任何列表,并在列表中获得所有相同的列表,所有其余列表在第二个列表中,并且它们位于元组内。

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

ex on number(更容易理解):fct1 [1,2,3,4,6,7,1,3,4]= ([1,1],[2,3,4,6,7,3,4])

我有第二个功能,我们称之为fct2

始终在fst(元组)上应用

fct2,我需要将结果累积到列表中。列表将是返回值

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

我知道我必须递归地做,只是不知道从哪里开始...... 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(元组)上运行,所以我达到[]作为snd(元组) 同时我需要在fst(元组)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`

1 个答案:

答案 0 :(得分:0)

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`