方案是否具有调用函数 n 次的函数。我不想要 map/for-each 因为该函数没有任何参数。类似这样的东西:-
(define (call-n-times proc n)
(if (= 0 n)
'()
(cons (proc) (call-n-times proc (- n 1)))))
(call-n-times read 10)
手动实现尾递归模 cons优化,以构建具有 O(1) 额外空间的结果列表:
(define (iterate0-n proc n) ; iterate a 0-arguments procedure n times
(let ((res (list 1))) ; return a list of results in order
(let loop ((i n) (p res))
(if (< i 1)
(cdr res)
(begin
(set-cdr! p (list (proc)))
(loop (- i 1) (cdr p)))))))
这种技术首先(?)在弗里德曼和怀斯的 TR19中描述。