我需要做一些基本上这样的事情:
(define test
(λ (ls1 ls2)
(cond
((empty? ls2) null)
(else
(append ls1 (car ls2)) (test ls1 (cdr ls2))) (displayln ls1))))
问题是else子句及其后面的函数。我需要执行else子句的两个子句,然后我需要执行最后一个函数但是我无法正确获取语法。
我需要(测试'(1 2 3)'(4 5 6))导致显示'(1 2 3 4 5 6)并且必须使用递归调用。
感谢任何建议。
感谢。
答案 0 :(得分:2)
那里有几个问题。首先,您在列表和原子(不是列表)上进行追加...至少(car l2)
不是列表。其次,您可能认为(append l1 (list (car l2))
会修改l1
。但这种情况并非如此。结果是一个新列表。
按照larsmans所说,你可以按照你的操作顺序进行。但您也可以写下以下内容
(define (test l1 l2)
(if (null? l2)
(displayln l1)
(let ((l1-follow-by-car-l2 (append l1 (list (car l2)))))
(test l1-follow-by-car-l2 (cdr l2)) ))
这有完全相同的行为。
答案 1 :(得分:1)
如果您迫切希望以递归方式解决此问题,并且您不关心返回值,请使用
(define (test l1 l2)
(if (null? l2)
(displayln l1)
(test (append l1 (list (car l2))) (cdr l2))))
(这是非常低效的btw:O( n × m )内存分配。)