streams in racket

怎甘沉沦 提交于 2019-11-30 19:56:44

For a general understanding of streams in Scheme, I'd recommend section §3.5 Streams in the SICP book. It'll teach you the basic concepts to solve stream-related problems such as the one in the question.

Regarding the problem in the question, here's the general idea to solve it:

  • Build two infinite streams, one producing only the string "red" and the other "blue"
  • Combine both streams taking one element from one and then one element from the other (alternating), this procedure is called interleave in SICP

It looks like you were asking how to build your own custom streams with thunks, which others have already answered. Just in case, it's worth noting that Racket has a stream library built-in and most Racketeers would use that for streams.

Here's an example:

#lang racket
(require racket/stream)
(define reds (stream-cons "red" reds))
(define red-blues (stream-add-between reds "blue"))

;; show ten of them
(for ([i 10] [e (in-stream red-blues)])
  (displayln e))

I wrote SRFI-41 which describes streams, provides an implementation, and gives many examples. The streams there differ from those in SICP, and are "better" in a way explained in the SRFI.

I am a newbie at this but the following solutions seems to work as well:

 (define red-then-blue
   (letrec ([f (lambda (x) (cons x(lambda ()(f(cond [(string=? x "red") "blue"]
                                              ["red"])))))])
   (lambda () (f "red"))))
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!