Haskell-- 尝试让我的 foldl 功能正常工作
Haskell-- Trying to make my foldl function work
我有一个函数可以将 [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)
你有一些例子 foldl function here
我有一个函数可以将 [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)
你有一些例子 foldl function here