【发布时间】:2013-02-05 11:32:13
【问题描述】:
Racket 中是否有 Python 的 itertools.count 类似物?我想创建一个无限的均匀间隔数字流。 in-naturals 与我想要的类似,但不提供步骤。我不想重新发明轮子,但是如果没有等效的功能,如何写一个? (我想应该使用生成器)
【问题讨论】:
标签: stream scheme racket infinite-sequence
Racket 中是否有 Python 的 itertools.count 类似物?我想创建一个无限的均匀间隔数字流。 in-naturals 与我想要的类似,但不提供步骤。我不想重新发明轮子,但是如果没有等效的功能,如何写一个? (我想应该使用生成器)
【问题讨论】:
标签: stream scheme racket infinite-sequence
自己制作函数可以在一行中完成:
(define (stream-from n s) (stream-cons n (stream-from (+ n s) s)))
为了测试它,你这里是一个打印 100000 个数字的例子:
#lang racket
(require racket/stream)
(define (stream-from n s) (stream-cons n (stream-from (+ n s) s)))
(define (stream-while s p)
(let ([fst (stream-first s)])
(if (p fst) (stream-cons fst (stream-while (stream-rest s) p)) empty-stream)))
(define test (stream-while (stream-from 0 1) (λ (x) (< x 100000))))
(stream-for-each println test)
【讨论】: