4

itertools.count Racketに Python の類似物はありますか? 等間隔の数字の無限ストリームを作成したい。in-naturals私が望むものに似ていますが、ステップを提供しません。車輪の再発明はしたくありませんが、同等の関数がない場合、どのように記述すればよいでしょうか? (私は、ジェネレーターを使用する必要があると思います)

4

2 に答える 2

6

無限値countを使用して、 Python と同じ機能を得ることができます。in-rangeend

(define (count start step)
  (in-range start +inf.0 step))

例えば:

(define s (count 2.5 0.5))

(stream-ref s 0)
=> 2.5
(stream-ref s 1)
=> 3.0
(stream-ref s 2)
=> 3.5
(stream-ref s 3)
=> 4.0
于 2013-02-20T13:53:26.143 に答える
2

関数を自分で作成するには、1 行で実行できます。

(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)
于 2017-01-05T13:34:14.067 に答える