Scheme 方案代码不为';行不通
我有一些代码,应该获取一个列表并返回该列表的相反部分。但是,它只返回列表。这是密码Scheme 方案代码不为';行不通,scheme,sicp,Scheme,Sicp,我有一些代码,应该获取一个列表并返回该列表的相反部分。但是,它只返回列表。这是密码 (define (reverse listx) (define (thing list1 list2) (if (null? list1) list2 (thing (cdr list1) (append list2 (list (car list1)))) ) ) (thing listx nil) ) 我认为问题在于 (appen
(define (reverse listx)
(define (thing list1 list2)
(if (null? list1)
list2
(thing (cdr list1) (append list2 (list (car list1))))
)
)
(thing listx nil)
)
我认为问题在于
(append nil 1) => 1
而不是
(append nil 1) => (1)
不,不是这样:您确实调用了
(append list2(list…)
,第二个参数包含在列表中
问题是,您使用的是append
,而您应该在那里使用简单的cons
()(事物(cdr列表1)(cons(汽车列表1)列表2))
使用cons
,list1
中的每个新元素将位于先前处理的元素的顶部(即“左侧”),从而以相反的方式生成结果:
但是使用append
您只是在重新创建相同的列表。当然,我对元素的重击感到困惑。非常感谢。我不认为append是个问题,而是它的参数顺序,尽管这里的首选过程是cons。
(a b c d e)
--------------------------
(a b c d e) ()
(b c d e) (a)
(c d e) (b a)
(d e) (c b a)
(e) (d c b a)
() (e d c b a)
--------------------------
(e d c b a)