我有一个递归函数,它基本上保持递归地将元素附加到列表中,直到满足条件。但是有一个问题,那就是使用append
,我们必须给它一个引用列表。这样做
(append (1 2) 3)
给我们一个错误。
问题是当我第一次将一个列表传递给参数时,我可以把'
它变成一个带引号的列表。但是,一旦我将某些内容附加到该列表并且它再次递归地传递给同一个函数,第二次append
尝试工作,它将看到不再引用该列表,因此Scheme认为它是一个过程而不是一个列表。让我向您展示代码的简化版本:
(define simple
(lambda (x y)
(if (equal? x '())
(display 'success!)
(simple (cdr x) (append y (car x))))))
我们通过do来运行函数(simple '(1 2 3) '())
我意识到上面的程序是没用的;这只是为了证明我在说什么。
谢谢!