Do Racket streams memoize their elements?

后端 未结 3 1819
眼角桃花
眼角桃花 2021-01-06 04:40

Does Racket use memoization when computing large amounts of numbers from an infinite stream? So, for example, if I printed out (aka, computed and displayed) the first 400 nu

3条回答
  •  [愿得一人]
    2021-01-06 04:55

    You can use the memoize package.

    GitHub source: https://github.com/jbclements/memoize/tree/master

    raco pkg install memoize

    Using it is as simple as replacing define with define/memo. To quote its example:

    (define (fib n)                                     
      (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2)))))  
    
    > (time (fib 35))                                   
    cpu time: 513 real time: 522 gc time: 0             
    14930352                                            
    
    > (define/memo (fib n)                              
        (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2)))))
    
    > (time (fib 35))                                   
    cpu time: 0 real time: 0 gc time: 0                 
    14930352      
    

    Also, it is generally quite easy to implement memoization yourself using a Racket hash-table.

提交回复
热议问题