【发布时间】:2017-11-29 17:27:35
【问题描述】:
我有一个我无法解决的问题。这是关于除数的后续任务。
第一个是定义一个函数,将数字 k 的所有正除数放入一个列表中
编辑:不小心写了错误的代码(这是当你有一个函数 divisors 和 divisor 时得到的......只是在玩耍,看看列表是如何反应的。) 关于列表中有多个的问题,这里不应该发生这种情况,但它会慢很多。
divisor :: Int -> [Int]
divisor k = divisor' 1 k
where
divisor' n k | n > k = []
| k `mod` n == 0 = (n:result)
| otherwise = result
where result = divisor' (n+1) k
到目前为止一切顺利。
我的以下任务是编写一个返回元组列表的函数(x,xs),其中x 是自然数/= 0,xs 是x 的所有正除数的列表。
应该是这样的:
take 7 trueDivisors
[(1,[]),(2,[1]),(3,[1]),(4,[1,2]),(5,[1]),(6,[1,2,3]),(7,[1])]
(take 到底代表什么?这可能是我的问题,因为我重新阅读了任务。通常函数只被他们的名字调用......试图让trueDivisors k 工作)
我已经尝试了很多,比如使用我的第一个函数来获取元组内部列表中的除数,但没有成功。语法错误超过语法错误。
也许有人可以帮助我,或者给我一个提示。可悲的是,剧本中没有类似的东西。谷歌也不太热衷。
提前致谢!
【问题讨论】:
-
你想要连接这些片段 (1) 生成一个无限列表
[1,2,3,4,......](2) 了解如何通过对旧列表的所有元素应用函数来生成新列表 (3)一个给定数字的函数,比如x,返回一个元组(x, divisors x)。 -
take 只从列表中获取 n 个元素。所以
take 3 [5,4,7,10,2] == [5,4,7] -
相关问题,
divisors 25返回什么? -
你熟悉
map函数吗?和/或,使用list comprehensions 语法?列表生成器语法怎么样,例如[2..10]或take 5 [2,4..]?你知道searching by types吗? -
这不过是寻找素数,因此您最好专注于如何做到最好。
标签: list haskell tuples factors