【发布时间】:2019-06-04 02:03:10
【问题描述】:
我在完成 Haskell 课程的作业时遇到问题。我已经解决了这个任务的一个部分问题:我必须编写一个函数,它接受一个 Int 并创建一个包含该 Int 的倍数的无限列表。
function :: Int -> [Int]
function d = [d*x | x <- [1..]]
控制台:
ghci> take 10 (function 3)
给了
[3,6,9,12,15,18,21,24,27,30]
在第二个任务中,我必须扩展该函数,以便它接受一个数字列表并将该列表的每个值用作一个因子(之前的 d)。例如:
ghci> take 10 (function [3, 5])
应该给
[3,5,6,9,10,12,15,18,20,21]
已经尝试过类似的列表理解
function d = [y*x | y <- [1..], x <- d]
但该函数以未排序的形式返回列表:
[3,5,6,10,9,15,12,20,15,25]
我们得到了应该使用 Haskell 的模函数的提示,但我不知道如何准确地进行。你有什么好的建议吗?
【问题讨论】:
-
尝试将
filter与模函数一起使用 -
什么是“不需要的形式”?
-
@talex 我目前的解决方案是:ghci> take 10 (function [3,5]) ---> [3,5,6,10,9,15,12,20,15, 25] (1*3, 1*5, 2*3, 2*5, 3*3, 3*5, 4*3, 4*5, 5*3, 5*5),但要升序排序像 [3,5,6,9,10,12,15,18,20,21] (1*3, 1*5, 2*3, 3*3, 2*5, 4*3, 3*5 , 5*3, 4*5, 6*3)
-
不要从无开始并添加“正确”数字,而是尝试从所有数字开始并删除“错误”数字。
-
[d*x | x <- [1..]]可以简化为[d, d+d ..]。