2

我有一个家庭作业问题,我必须定义一个函数,该函数以列表形式输入,其中包含较小的整数列表,并将每个最里面的列表中的数字相加,然后将结果和相乘。

我的代码如下,显然不起作用,任何帮助将不胜感激:)

sumI :: [Int] -> Int
sumI [] = 0
sumI (x:xs) = x + sumI xs

mapQ :: [[Int]] -> Int
mapQ [] = []
mapQ xs = [product (sumI x) | x <- xs]
4

2 回答 2

5

因为这是一个家庭作业问题 - 这里有一些提示。

  1. 您可以使用 map 将函数应用于列表的每个成员。由于列表是由列表组成的,一个合适的函数可能是sum

  2. 你想把一个列表变成一个数字。我的意思是,你有一个你需要的总和列表,你想把它们相乘得到一个数字。这是很常见的,并且由许多fold功能之一处理。

试试这些。

于 2012-04-23T22:21:46.253 回答
1

我想你快到了。将最后一行替换为

mapQ xs = product [ sumI x | x <- xs]
于 2012-04-23T22:19:15.580 回答