小编use*_*572的帖子

在Racket中为延迟列表构建累加器

我定义了一个从零开始的所有整数的简单惰性列表:

(define integers-from
  (lambda (n) 
    (cons n
          (lambda () (integers-from (+ 1 n))))))

(define lz (integers-from 0))
Run Code Online (Sandbox Code Playgroud)

我还编码了一个将惰性列表作为参数的累加器

(define lz-lst-accumulate
  (lambda (op initial lz)
    (if (null? lz)
        initial
        (cons (op (head lz) initial)  
              (lambda () (lz-lst-accumulate op (op initial (head lz)) (tail lz))))))) 
Run Code Online (Sandbox Code Playgroud)

这个累加器会回答惰性列表的格式吗?这是对累加器的简单测试:

(define acc (lz-lst-accumulate * 1 lz))
(take acc 4)
=> '(1 2 6 24)
Run Code Online (Sandbox Code Playgroud)

take是一个帮助函数,它从n懒惰列表的前几个元素创建一个列表:

(define head car)

(define tail
  (lambda (lz-lst)
     ((cdr lz-lst)) ))

(define take
  (lambda (lz-lst n)
    (if (= n …
Run Code Online (Sandbox Code Playgroud)

scheme lazy-evaluation racket

4
推荐指数
1
解决办法
632
查看次数

标签 统计

lazy-evaluation ×1

racket ×1

scheme ×1