2012-11-12 41 views
0

我有一個函數,讓我們叫它fct1,它採取任何列表,並獲得列表中的所有等於一個,並在其餘所有第二個列表,它們在一個元組內。遞歸Haskell函數,將列表分隔成一對列表,然後通過對

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(元組),我需要將結果累加到列表中。而名單將返回值

我需要申請的FST(元組)一個fct2然後敷在SND相同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(元組)上運行,所以我到達[]作爲SND(元組) 和同時我需要在fst(tuple)fct2上運行這個列表並將它總結爲一個需要保留並累積到一個列表中的lement。

我希望我更明確的這個時候..

找到了解決辦法這裏是代碼:

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` 
+0

我覺得你應該給我們一些更多的例子:)(尤其是關於你最後提到的元組東西。) – huon

+3

另外,[stop,Hoogle time!](http://www.haskell.org/hoogle/?hoogle=%28a-%3EBool%29+-%3E+ [a] + - %3E +%28 [a]%2C [a]%29)('partition'聽起來最有用。) – huon

+0

我確實看過分區,但是不太明白它是如何應用於我的tupple的。事實上,我已經完成了所有需要應用的功能,我需要了解如何通過tupplet並用新的替換連接符,直到達到[] –

回答

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`