在 Scheme 中编写尾递归过程
Writing tail recursive procedure in Scheme
我想将下面的代码转换为尾递归过程(它需要一个数字 'n' 和一个列表 'items' 和 returns 列表的第 n 个项目)。
(define (take n items)
(if (= 0 n)
'()
(if (< (length items) n)
items
(cons (car items)
(take (- n 1) (cdr items))))))
我试过这个代码
(define (take n items)
(define (iter-lst n lst)
(if (null? n)
lst
(iter-lst (- n 1) (cdr lst)))
(iter-lst 0 items)))
(take 4 '(1 2 3 4 5))
这是一个可能的解决方案:
(define (take1 n items)
(define (take-it k items res)
(if (or (null? items) (>= k n))
(reverse res)
(take-it (+ k 1) (cdr items) (cons (car items) res))))
(take-it 0 items '()))
如果第一个参数是负整数,这也适用。
我想将下面的代码转换为尾递归过程(它需要一个数字 'n' 和一个列表 'items' 和 returns 列表的第 n 个项目)。
(define (take n items)
(if (= 0 n)
'()
(if (< (length items) n)
items
(cons (car items)
(take (- n 1) (cdr items))))))
我试过这个代码
(define (take n items)
(define (iter-lst n lst)
(if (null? n)
lst
(iter-lst (- n 1) (cdr lst)))
(iter-lst 0 items)))
(take 4 '(1 2 3 4 5))
这是一个可能的解决方案:
(define (take1 n items)
(define (take-it k items res)
(if (or (null? items) (>= k n))
(reverse res)
(take-it (+ k 1) (cdr items) (cons (car items) res))))
(take-it 0 items '()))
如果第一个参数是负整数,这也适用。