有延迟的方案清单

Scheme list with delay

这是一个数字列表,当调用 takeD 时,它会根据之前的列表生成一个列表。例如,如果您说 (takeD 3 L1),您将得到一个列表 (1 2 3)。 intlistNew 从给定数字开始的不同列表创建一个列表。例如 (takeD 3 (delay (intlistNew 3 100))) 将 return (3 4 5)。我正在尝试找出一种更改 intListNew 的方法,我不需要输入 100 作为参数 3。我可以使用你的帮助。谢谢。

(define L1 (list 1 2 3 4 5 6 7 8 9))

(define (takeD n L)
(if (= n 0) '()
  (cons (car (force L)) (takeD (- n 1) (cdr (force L))))))

(define (intlistNew m n)
(if (> m n) '() (cons m (delay (intlistNew (+ 1 m) n)))))

(takeD 3 (delay (intlistNew 3 100)))

假设“我不需要输入 100 作为参数,只需输入 3”意味着“我希望 intListNew 可以生成一个包含无限数量元素的列表”,那么您只需删除来自函数的参数,以及递归终止测试:

(define (intlistNew m)
  (cons m (delay (intlistNew (+ 1 m)))))

(takeD 3 (delay (intlistNew 3)))

可以这样做是因为延迟执行,避免了函数因为递归调用而无限执行