我有一个函数,让我们调用它fct1
,它接受任何列表并在一个列表中获取所有相等的一个,在第二个列表中获取所有其余的,它们在一个元组中。
data sale : ( sale string int)
fct1 [sale,sale..sale]
将仅返回在第一个列表中具有相同字符串且在第二个列表中具有所有其他字符串的销售)
ex 上的数字(更容易理解):fct1 [1,2,3,4,6,7,1,3,4]= ([1,1],[2,3,4,6,7,3,4])
我还有第二个功能,我们称之为fct2
。
fct2
总是在 fst(tuple) 上应用,我需要将结果累积到一个列表中。列表将是返回值
我需要fct2
在 fst(tuple) 上应用 a 然后在 snd(tuple) 上应用相同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) 的身份到达 [],同时我需要在 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`