これはSICP Book Chapter 3.5.2に関する質問です。SICP無限ストリーム(第3.5.2章)
他のプログラミング言語でストリームデータ構造を実装しています。次のスニペットを正しく理解しているかどうかはわかりません。私は(cons-stream n (integers-starting-from (+ n 1))))
を実行して値を返す関数を実行する(integers-starting-from (+ n 1))
に理解されるものと
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
(define integers (integers-starting-from 1))
。 cons-stream
の第2の仮パラメータは(integers-starting-from (+ n 1))
であり、()
で囲まれているため、実行を遅らせるのではなく、無限に関数を実行します。
私はこのスニペットを実行する前に、次の整数が実行されているストリームの秒要素前でも無限再帰的につながっているようです。
lectureの中に示されているように、これがなぜスキームで機能するように見えるのですか?
私ではなく、このような何かを記述する必要があります理解してから:
(define (integers-starting-from n)
(cons-stream n (lambda() (integers-starting-from (+ n 1)))))
(define integers (integers-starting-from 1))
んこれは、スキームは(integers-starting-from (+ n 1))
の実行を遅らせる魔法のいくつかの種類を持っていることを意味?
[SRFI-41](http://srfi.schemers.org/srfi-41/)を参照してください。これは[私のブログ](http: /programmingpraxis.com/essays/#srfi41streams)。このドキュメントでは、 'cons-stream'の実装について詳しく説明しています。 – user448810