有一种求素数的方法,流式计算。
def integers_starting_from(i):
while True:
yield i
i += 1
def stream_filter(pred, stream):
while True:
x = stream.next()
if pred(x):
yield x
def sieve():
def divisible(x):
return lambda e: e % x != 0
stream = integers_starting_from(2)
while True:
x = stream.next()
yield x
stream = stream_filter(divisible(x),stream)
打印前100个素数
def printn(n, stream):
for _ in xrange(n):
print stream.next(),
print
printn(100, sieve())
对于上面的计算,有个地方不明白
def sieve():
def divisible(x):
return lambda e: e % x != 0
stream = integers_starting_from(2)
while True:
x = stream.next()
yield x
stream = stream_filter(divisible(x),stream)
这里的return lambda e: e % x != 0
这里的e究竟是指带什么?
其实我是无聊点进来的,你这个不就是个函数形参么,有什么需要理解的吗?
divisible返回的是函数,这个函数的形参命名为e而已啊,具体是什么就看consumer如何穿参了。
函数curry化,大概是这个意思,利用闭包先将x封装起来。
可能我说的不对,因为没看你的逻辑。