相关疑难解决方法(0)

解释这一块输出素数流的haskell代码

我无法理解这段代码:

let
  sieve (p:xs) = p : sieve (filter (\ x -> x `mod` p /= 0) xs)
in sieve [2 .. ]
Run Code Online (Sandbox Code Playgroud)

有人可以为我分手吗?我知道它有递归,但这就是问题我无法理解这个例子中的递归是如何工作的.

primes haskell lazy-evaluation

19
推荐指数
3
解决办法
3434
查看次数

Haskell - > F#:特纳的筛子

当我偶然发现一种名为Euler's Sieve的Eratosthenes筛子的改进版本时,我正在阅读不同的筛选算法.根据维基百科,在Haskell中实现了一个稍微不同的想法版本(称为Turner's Sieve).

现在我试图了解代码片段的确切内容,我认为我已经得到了它,但现在我想将代码翻译成F#并且真的不知道从哪里开始.我主要担心的是,似乎没有"减去"两个序列的功能.

这是代码:

import Data.OrdList (minus)

primes = euler [2..]
euler (p : xs) = p : euler (xs `minus` map (*p) (p : xs))
Run Code Online (Sandbox Code Playgroud)

如何在F#中实现?它甚至可能吗?

f# haskell sieve

8
推荐指数
1
解决办法
1213
查看次数

单行Python素发生器

我试图在一行Python中创建素数生成器,这只是一个有趣的练习.

以下代码按预期工作,但速度太慢:

primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,i) for k in xrange(1,i)])
for i in primes(10):
   print i,
Run Code Online (Sandbox Code Playgroud)

所以我试图通过检查j和k的平方根来做到这一点:

primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,int(round(math.sqrt(i)+1))) for k in xrange(1,int(round(math.sqrt(i)+1)))])
for i in primes(10):
   print i,
Run Code Online (Sandbox Code Playgroud)

但它输出: 2 3 5 6 7 8

所以我的指数j和k肯定有问题,但我没有线索.

python math primes integer

6
推荐指数
1
解决办法
8319
查看次数

标签 统计

haskell ×2

primes ×2

f# ×1

integer ×1

lazy-evaluation ×1

math ×1

python ×1

sieve ×1