python延迟执行

Ole*_*liv 3 lisp python perl sicp

要在Lisp中将实现为延迟列表,建议使用Lisp宏.

(defmacro cons-stream (a b)
   (cons ,a (delay ,b)))

(defmacro delay (expr)
  `(memo-proc (lambda () ,expr)))
Run Code Online (Sandbox Code Playgroud)

用Python和Perl的方式做同样的事情是什么?

编辑.是否可以使用这样一个很酷的结构作为流

(define primes (sieve (integers-starting-from 2)))
Run Code Online (Sandbox Code Playgroud)

在Python和Perl等语言中

Eri*_*rom 5

在Python中,最接近的结构可能是生成器表达式.

在Perl中,没有本机惰性列表,但该语言提供了构建一个所需的所有原语.我编写了一个名为List :: Gen的惰性列表库,可以在CPAN上找到.

use List::Gen '*';

my $primes = <2..>->filter(\&is_prime);  # where you provide &is_prime

say "@$primes[0..10]";  # lazily finds the first 11 primes
Run Code Online (Sandbox Code Playgroud)

这个<2..>位可以写得很详细range(2, 9**9**9)