【问题标题】:Writing tail recursive procedure in Scheme在 Scheme 中编写尾递归过程
【发布时间】:2023-04-01 19:29:01
【问题描述】:

我想将下面的代码转换为尾递归过程(它需要一个数字'n'和一个列表'items'并返回列表的前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))

【问题讨论】:

    标签: scheme racket


    【解决方案1】:

    这是一个可能的解决方案:

    (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 '()))
    

    如果第一个参数是负整数,这也有效。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多