使用限制在Scheme中反转列表

问题描述 投票:1回答:1

我已经有了反转列表的代码:

    (define (myreverse lst)
       (if (null? lst)
          lst
          (append (reverse (cdr lst))
                  (list (car lst)))))

但我想只使用lectrecconscarcdr这样做。我怎样才能做到这一点?

list scheme racket reverse restriction
1个回答
0
投票

在没有追加的情况下反转列表的标准方法是使用辅助函数REVAPPEND,如下所示:

(define (reverse x) (revappend x '()))
(define (revappend x y)
  (if (null? x)
      y
      (revappend (cdr x) (cons (car x) y))))

现在,如果你想将反向实现为单个函数,你可以使用LETREC本地定义REVAPPEND助手,就像这样

(define (reverse x)
  (let revappend ((x x) (y '()))
    ...))

这只是一个让您入门的模板,随时可以询问您是否需要更多帮助。

© www.soinside.com 2019 - 2024. All rights reserved.