スキームでストリームマップを介して整数を定義するにはどうすればよいですか:
(整数を定義する (stream-cons 1 (stream-map *something* *something*))
スキームでストリームマップを介して整数を定義するにはどうすればよいですか:
(整数を定義する (stream-cons 1 (stream-map *something* *something*))
(define integers
(stream-cons 1
(stream-map add1 integers)))
ストリームの詳細については、SRFI-41を参照してください。
@ 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)))
SICP の例を使用することもできます。
(define (integers-starting-from n)
(cons-stream n (integers-starting-from (+ n 1))))
(define nats (integers-starting-from 1))