0

私には関数があり、それを呼び出しfct1ましょう。任意のリストを取得し、リスト内のすべての等しいものと2番目のリスト内の残りすべてを取得し、それらはタプル内にあります。

data sale : ( sale string int) fct1 [sale,sale..sale]最初のリストで文字列が同一で、2番目のリストで他のすべての文字列を持つセールのみが返されます)

番号の例(理解しやすい):fct1 [1,2,3,4,6,7,1,3,4]= ([1,1],[2,3,4,6,7,3,4])

そして、2番目の関数があります。それを呼び出しましょうfct2

fct2は常にfst(tuple)に適用され、結果をリストに蓄積する必要があります。そして、リストは戻り値になります

fst(tuple)にaを適用してから、snd(tuple)fct2に同じものを適用fct1して、fct1=[]に到達するまで残りのタプルを再作成する必要があります。

私はそれを再帰的に行わなければならないことを知っています、ただどこから始めればよいのかわかりません...fct1そしてfct2また。

これが私の擬似コードです...

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)で実行する必要があるため、snd(tuple)として[]に到達すると同時に、リストを取得して1つの要素に要約する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`
4

1 に答える 1

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`
于 2012-11-13T15:44:16.403 に答える