python延时程序_python延迟执行

这篇博客介绍了如何使用Perl和Python实现延时程序,特别是通过Eratosthenes的筛法生成质数。Perl部分展示了 Higher Order Perl 技术中的 Stream 模块应用,而Python部分则演示了如何借用代码创建类似的功能。文章还提到了在某些语言如Haskell中,延迟评估使得实现这种算法更为直接。
摘要由CSDN通过智能技术生成

Perl的

runrig suggested Mark Dominus出色的Higher Order Perl技术.使用HOP免费提供的样品代码Stream module,Eratosthenes的筛子是

#! /usr/bin/env perl

use strict;

use warnings;

use Stream qw/ filter head node promise show tail upfrom /;

use subs 'sieve'; # no parens on recursive calls

sub sieve {

my($s) = @_;

my $n = head $s;

node $n, promise { sieve filter { $_[0] % $n != 0 } tail $s };

}

sub primes { sieve upfrom 2 }

show primes, 10;

输出:

$./primes

2 3 5 7 11 13 17 19 23 29

Python

从gist by alexbowe借用代码,使用流的Python筛选

#! /usr/bin/env python

null_stream = (None, None)

def reduce(f, result, stream):

if stream is null_stream: return result

return reduce(f, f(result, head(stream)), tail(stream))

def take(N, stream):

if N <= 0 or stream is null_stream: return null_stream

return (head(stream), lambda: take(N-1, tail(stream)))

def filter(pred, stream):

if stream is null_stream: return null_stream

if pred(head(stream)):

return (head(stream), lambda: filter(pred, tail(stream)))

return filter(pred, tail(stream))

def integers_from(N): return (N, lambda: integers_from(N+1))

def head((H, _)): return H

def tail((_, T)): return T()

def to_array(stream): return reduce(lambda a, x: a + [x], [], stream)

def sieve(stream):

if stream is null_stream: return null_stream

h = head(stream)

return (h, lambda: sieve(filter(lambda x: x%h != 0, tail(stream))))

def primes(): return sieve(integers_from(2))

print to_array(take(10, primes()))

输出:

$./prymes

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

其他可能性

在某些语言中,流模式是不可见的.例如,延迟评估是Haskell的一个特性,因此您可以将质数定义为

primes = sieve [2 ..]

where sieve (x:xs) =

let remains = filter (not . isMultipleOf x) xs

in x : sieve remains

isMultipleOf a b = b `mod` a == 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值