你好我必须实现一个筛选Eratosthenes的功能。
我已经有了一个功能
removep p l
删除与谓词l
匹配的p
元素和函数
nats
返回自然数字的无限列表,我应该在我的解决方案中使用两者。
现在,我确实理解筛子本身是如何工作的,但似乎我在实施这个问题时遇到了问题。
我正在做这样的事情:
sieve = (drop 1 nats)
where
sieve (h:t) = h : (removep (\x -> (mod x p) == 0) t) : sieve
但这似乎不起作用。有帮助吗? 另请注意,这是一项任务,因此如果可能,请不要泄露确切的解决方案。我宁愿知道我做错了什么以及我需要如何改变它。提前谢谢。
答案 0 :(得分:3)
您的代码中存在一些错误:
您想要定义一个sieve
列表,该列表应该是素数列表,但是在where
你阴影名称sieve
中一个功能。在这个定义中你使用sieve
作为列表,但在这里它实际引用了函数,因此你得到了一个类型错误。
您希望将函数应用于drop 1 nats
以获取素数列表。
在mod x p
mod x h
,它应该是h
,因为sieve (h:t) = h:removep ... :_
是您正在考虑的主要内容。
您正在定义h
但是在这里您要创建一个列表,其中第一个元素是removep ...
,一个数字,第二个元素是sieve
,这是一个列表,然后剩余的元素由mod
获取(这已经说错了。
挑剔:从技术上讲,这不是eratosthenes的筛子,因为在筛子的算法中,你从不实际使用<form action="action" method="get">
<input type="hidden" name="test" value="test" />
<ul>
<li><input id="checkbox" type="checkbox" name="forest_type" value="forest_1"><label for="checkbox_forest" data-forest="Estern forest">Forest 1</label></li>
</ul>
<button type="submit">Submit</button>
</form>
来检查是否可分。
答案 1 :(得分:1)
基本的想法是,您将ul {text-align-justify}
列表作为筛子的起点。然后,您将带有谓词的nats
函数递归应用于除第一个元素之外的所有元素。
你很亲密,但我认为你的问题在于符号(见Bakuriu的回答) 我不会给你答案,但我会给你一个提示:
removep
我希望我没有放弃太多让它变得微不足道。祝你好运。
PS :正如Bakuriu所说,这真的不是一个真正的筛子。有关此问题的更多信息,请查看here