我已经有了反转列表的代码:
(define (myreverse lst)
(if (null? lst)
lst
(append (reverse (cdr lst))
(list (car lst)))))
但我想只使用lectrec
,cons
,car
和cdr
这样做。我怎样才能做到这一点?
在没有追加的情况下反转列表的标准方法是使用辅助函数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 '()))
...))
这只是一个让您入门的模板,随时可以询问您是否需要更多帮助。