【问题标题】:Infinite ascending sequence in RacketRacket 中的无限升序
【发布时间】:2013-02-05 11:32:13
【问题描述】:

Racket 中是否有 Python 的 itertools.count 类似物?我想创建一个无限的均匀间隔数字流。 in-naturals 与我想要的类似,但不提供步骤。我不想重新发明轮子,但是如果没有等效的功能,如何写一个? (我想应该使用生成器)

【问题讨论】:

    标签: stream scheme racket infinite-sequence


    【解决方案1】:

    自己制作函数可以在一行中完成:

    (define (stream-from n s) (stream-cons n (stream-from (+ n s) s)))
    

    为了测试它,你这里是一个打印 100000 个数字的例子:

    #lang racket
    (require racket/stream)
    
    (define (stream-from n s) (stream-cons n (stream-from (+ n s) s)))
    
    (define (stream-while s p)
      (let ([fst (stream-first s)])
      (if (p fst) (stream-cons fst (stream-while (stream-rest s) p)) empty-stream)))
    
    (define test (stream-while (stream-from 0 1) (λ (x) (< x 100000))))
    
    (stream-for-each println test)
    

    【讨论】:

      【解决方案2】:

      您可以使用具有无限 end 值的 in-range 获得与 Python 的 count 相同的功能:

      (define (count start step)
        (in-range start +inf.0 step))
      

      例如:

      (define s (count 2.5 0.5))
      
      (stream-ref s 0)
      => 2.5
      (stream-ref s 1)
      => 3.0
      (stream-ref s 2)
      => 3.5
      (stream-ref s 3)
      => 4.0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-03
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        • 2019-11-12
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        相关资源
        最近更新 更多