2017-10-18 11 views
1

だから私は与えられている以下の定義:スキーム - このような出力をどのように説明しますか?

(define head car) 

(define (tail stream) (force (cdr stream))) 

(define (addL x y)(cons-stream (+ (head x) (head y))(addL (tail x) (tail y)))) 

(define fibs(cons-stream 1(cons-stream 1 
    (addL (tail fibs) fibs)))) 

(define (reorder order-stream data-stream) 
    (cond ((stream-null? order-stream) the-empty-stream) 
     ((stream-null? data-stream) the-empty-stream) 
     (else (cons-stream (stream-ref data-stream (stream-first order-stream)) 
       (reorder (stream-rest order-stream) data-stream))))) 

、私はこのコード行から出力されたこれらの数字を(私は以下が表示されます)最初の7つの数字を表示し、説明するように頼まれています

(reorder (tail fibs) (tail fibs)) 

結果ストリームの最初の7つの要素の出力は、次のとおり

"2、3、5、13、55、610、28657"

誰もがこのことの説明のための任意のアイデアを持っていますか?私はかなりここで実際に何が起こっているか理解していない...

+0

'(tail fibs)'の最初の13要素を表示します。要素とその位置の間の対応が見つかるかどうかを確認してください。 – molbdnilo

答えて

1

まあ、fibsは、フィボナッチ数の無限(怠け者)ストリームで、

fibs = 1 , ft ... 
ft = 1 , (addL fibs ft) ... 
; 1, 1, 2, 3, 5, 8, 13, .... 

は私にreorderの定義を書き留めすることを許可します擬似コードは、xsがそのまま渡され、そしてjsは各反復上からそのヘッド要素を取っていることを

(reorder js xs) = empty       | if (empty? js) or (empty? xs) 
       = xs[js[0]] , 
        (reorder (rest js) xs) ... | otherwise 

注意として、従うことは簡単です。これは(reorder (stream i j k ... n ...) xs)は徐々にI番目、次いでJ番目、K番目、... N番目、...ストリームxsからの要素をとることを意味します。

通話が(reorder ft ft)あるので、生産順序は

ft[ft[0]], ft[ft[1]], ft[ft[2]], ... 

すなわち

ft[1], ft[2], ft[3], ft[5], ft[8], ft[13], .... 

あなたが見るものであるです。

関連する問題