5

スキームでストリームマップを介して整数を定義するにはどうすればよいですか:

(整数を定義する (stream-cons 1 (stream-map *something* *something*))
4

3 に答える 3

4
(define integers
  (stream-cons 1
    (stream-map add1 integers)))

ストリームの詳細については、SRFI-41を参照してください。

于 2013-01-24T15:31:23.303 に答える
4

@ user448810 による回答は完璧で、Racket で動作します (Racket 固有の手順を使用します)。しかし、質問には もタグ付けされてSICPいるので、ここに私の 2 セントを示します。

SICP で利用可能な Scheme の手順のサブセットのみを使用して質問に答えると、書籍で定義されている次のプリミティブ ストリーム操作のみを使用して、同等ではあるがわずかに異なる解決策が得られますstream-null? stream-cons stream-car stream-cdr。特に、Scheme の標準部分ではないことに注意してstream-mapください。この本では、原始的な操作の観点から実装されており、Racket の実装よりも優れています。パラメーターとして可変数のストリームを受け取ることができます。

(define (stream-map proc . args)
  (if (stream-null? (car args))
      stream-null
      (stream-cons (apply proc (map stream-car args))
                   (apply stream-map (cons proc (map stream-cdr args))))))

(define (add-streams s1 s2)
  (stream-map + s1 s2))

上記の手順が整っていれば、簡単に定義できますintegers

(define ones (stream-cons 1
                          ones))

(define integers (stream-cons 1
                              (add-streams ones integers)))
于 2013-01-24T15:54:36.180 に答える
0

SICP の例を使用することもできます。

(define (integers-starting-from n)
  (cons-stream n (integers-starting-from (+ n 1))))

(define nats (integers-starting-from 1))
于 2015-04-23T23:48:22.163 に答える