合并Racket R5RS中的两个列表

时间:2014-11-24 05:54:41

标签: list scheme append racket

我应该创建一个名为(merge-list lst1 lst2)的函数,它交替地从两个输入列表中的一个中选择元素并创建一个新列表。例如,输出  (merge-list'(2 4)'(b c))是'(2 b 4 c)。这是我到目前为止所做的,但是当我编译时,我收到的是“应用程序:不是程序”错误

 (define (merge-list lst1 lst2)

(cond((null?lst1)lst2)

 ((null? lst2) lst1))

  (append( append(list(car lst1) list(car lst2)))list-shuffle((cdr lst1)(cdr lst2))))

1 个答案:

答案 0 :(得分:2)

解决方案比您想象的要简单,我们甚至不必使用append - 事实上,您应该避免使用append,尽可能使用cons append 1}}用于构建输出列表:这是因为O(n^2)做了更多工作,可能会导致(define (merge-list lst1 lst2) (cond ((null? lst1) lst2) ; if the first list is empty, return the second ((null? lst2) lst1) ; if the second list is empty, return the first (else (cons (car lst1) ; otherwise `cons` the first element of the first list (merge-list lst2 (cdr lst1)))))) ; and interleave the lists 解决方案。试试这个:

(merge-list '(2 4) '(b c))
=> '(2 b 4 c)

(merge-list '(2 4 6) '(b c d))
=> '(2 b 4 c 6 d)

对于相同长度的列表,它按预期工作:

{{1}}