Scheme 深反函数方案

Scheme 深反函数方案,scheme,Scheme,我正在做一个方案程序,它接收一个列表,然后将其反转。到目前为止,它适用于不包含任何子列表的简单列表,但当我测试它是否包含子列表时,它失败了。请帮助我哪里出了问题。 代码如下: (define deep-reverse (lambda (L) (cond ((empty? L) '()) (else (append (deep-reverse (rest L)) (list (first L))))))) 首先,您使用的是未定义的Scheme函数。我将进行以下

我正在做一个方案程序,它接收一个列表,然后将其反转。到目前为止,它适用于不包含任何子列表的简单列表,但当我测试它是否包含子列表时,它失败了。请帮助我哪里出了问题。 代码如下:

(define deep-reverse
  (lambda (L)
    (cond
      ((empty? L) '())
      (else (append (deep-reverse (rest L)) (list (first L)))))))

首先,您使用的是未定义的Scheme函数。我将进行以下假设:

空的?是空的吗

其余的是cdr

首先是汽车

代码的工作方式是获取列表中的第一个元素并将其添加到另一个列表中。但是,列表的第一个元素可以是列表本身。您需要进行测试,以查看正在处理的元素是原子元素还是列表元素。如果它是一个列表,那么您可以递归调用deepreverse


如果您想查看附加到本文档的代码,请留下注释。

首先,rest和enpty?都是教学语言时常用的同义词。更容易阅读和理解。
(define (deeprev L)
          (if (null? L) '()
              (if (list? (car L))
                  (if (chek (car L)) (append (deeprev (cdr L)) (list (reverse (car L))))         
                  (append (deeprev (cdr L)) (list (deeprev (car L)))))
                  (append (deeprev (cdr L)) (list (car L))))))