撤消有限制的Scheme中的列表

时间:2019-02-26 12:11:16

标签: list scheme racket reverse restriction

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

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

但是我只想使用lectrecconscarcdr来做到这一点。我该怎么办?

1 个答案:

答案 0 :(得分: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 '()))
    ...))

这只是一个入门模板,请随时询问是否需要更多帮助。