【问题标题】:Streams in Scheme - define integers through stream map in scheme方案中的流 - 通过方案中的流映射定义整数
【发布时间】:2013-01-08 09:57:06
【问题描述】:

如何在 Scheme 中通过 stream-map 定义整数:

(定义整数 (stream-cons 1 (stream-map *something* *something*))

【问题讨论】:

    标签: stream scheme racket sicp lazy-sequences


    【解决方案1】:
    (define integers
      (stream-cons 1
        (stream-map add1 integers)))
    

    有关流的更多信息,请参阅SRFI-41

    【讨论】:

      【解决方案2】:

      @user448810 的答案是完美的,它将在 Racket 中工作(它使用特定于 Racket 的程序)。但是这个问题也被标记为SICP,所以这是我的两分钱。

      仅使用 SICP 中可用的 Scheme 过程的子集来回答问题会产生等效但略有不同的解决方案,仅使用书中定义的以下原始流操作:stream-null? stream-cons stream-car stream-cdr。特别注意stream-map不是Scheme的标准部分,在书中它是根据原始操作实现的,比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)))
      

      【讨论】:

        【解决方案3】:

        您也可以使用 SICP 中的示例:

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

        【讨论】:

          猜你喜欢
          • 2015-02-22
          • 2014-05-07
          • 1970-01-01
          • 2012-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多