Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function Haskell--尝试使我的foldl函数工作_Function_Haskell_Lambda_Tuples_Foldleft - Fatal编程技术网

Function Haskell--尝试使我的foldl函数工作

Function Haskell--尝试使我的foldl函数工作,function,haskell,lambda,tuples,foldleft,Function,Haskell,Lambda,Tuples,Foldleft,我有一个将[a,b,c,d,…]转换为[(a,b),(c,d),…]的函数。现在,这是可行的,下面是代码: makeTuple :: [a] -> [(a,a)] makeTuple [] = [] makeTuple [a] = [] makeTuple (x:y:xs) = (x,y): (makeTuple xs) 现在我要做的下一件事是:使用前面的函数,使用foldl和lambda表达式,将每个元组转换为其两个元素的乘积。这就是我所拥有的: productTuple [x] =

我有一个将[a,b,c,d,…]转换为[(a,b),(c,d),…]的函数。现在,这是可行的,下面是代码:

makeTuple :: [a] -> [(a,a)]
makeTuple [] = []
makeTuple [a] = []
makeTuple (x:y:xs) = (x,y): (makeTuple xs)
现在我要做的下一件事是:使用前面的函数,使用foldl和lambda表达式,将每个元组转换为其两个元素的乘积。这就是我所拥有的:

productTuple [x] = foldl makeTuple [] [x]

现在我不确定这是否正是人们对我的要求。我不确定是否应该用类型声明之类的东西来创建一个单独的函数。也许有人能告诉我这是不是最好的方法。另外,这段代码不起作用,我不知道为什么,我需要这部分的帮助。(注意,上面说要使用lambda,但我不知道如何真正正确地使用它们,这是我需要帮助的另一部分)我非常感谢,谢谢。

练习要求您使用
makeTuple对输入列表进行预处理,然后将其折叠起来

productTuple :: [Int] -> [Int]
productTuple xs = foldl (some lambda) something (makeTuple xs)

这不是最方便的方法,但我想练习的目的是为了它而强制您使用
foldl

lambda函数应该尊重此签名:

 [a] -> (b,b) -> [a]
累加器的类型为[a],元组的类型为(b,b)

您可以尝试这样的lambda
\acc(a,b)->acc++[a*b]

最后一个函数可能如下所示:

productTuple :: Num a => [a] -> [a]
productTuple xs = foldl (\acc (a, b) -> acc++[a*b]) [] (makeTuple xs)
你有一些


谁说你必须使用
makeTuple
函数?你可能必须实现productTuple的空和反两种情况,所以
productTuple(x:xs)
productTuple[]
。提示:你如何使用接受列表作为输入的
foldl
来重新创建该列表(基本上是一个
id
函数)?相关:使用OP的
makeTuple
会导致类型错误:它只接受一个列表作为参数。