有延迟的方案清单
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)))
可以这样做是因为延迟执行,避免了函数因为递归调用而无限执行
这是一个数字列表,当调用 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)))
可以这样做是因为延迟执行,避免了函数因为递归调用而无限执行