Scheme将两个列表合并为一个

时间:2012-09-28 20:22:00

标签: scheme

如何设计将两个列表合并为一个列表的函数。 第一个列表的第一个元素将是新列表的第一个元素,第二个列表的第一个元素将是新列表的第二个元素 (a,b,c,d,e,f)(g,h,i)将是(a,g,b,h,c,i,d,e,f,)

4 个答案:

答案 0 :(得分:13)

这是R6RS

中纯粹的功能和递归实现
(define (merge l1 l2)
      (if (null? l1) l2
          (if (null? l2) l1
              (cons (car l1) (cons (car l2) (merge (cdr l1) (cdr l2)))))))

答案 1 :(得分:6)

您尝试实施的程序称为interleavemerge。因为这看起来像家庭作业,我不能给你一个直接的答案,而是我会指出你正确的方向;填空:

(define (interleave lst1 lst2)
  (cond ((null? lst1)     ; If the first list is empty
         <???>)           ; ... return the second list.
        ((null? lst2)     ; If the second list is empty
         <???>)           ; ... return the first list.
        (else             ; If both lists are non-empty
         (cons (car lst1) ; ... cons the first element of the first list
               <???>))))  ; ... make a recursively call, advancing over the first
                          ; ... list, inverting the order used to pass the lists.

答案 2 :(得分:1)

无需检查两个列表:这是一个简单的版本:

    (define (interleave lx lz)
  (cond
    [(empty? lx) lz]
    [else (cons (first lx)(interleave lz (rest lx)))]))


(check-expect(interleave '() '())'())
(check-expect(interleave '(X X X X X X) '(O O O O O))
             (list 'X 'O 'X 'O 'X 'O 'X 'O 'X 'O 'X))
(check-expect(interleave '(1 2 3) '(a b c d e f))
             (list 1 'a 2 'b 3 'c 'd 'e 'f))

答案 3 :(得分:0)

这可以通过简单的条件来完成。

<body>
<div id="nav">
MENU
</div>

<div id="hamburger">
  <div id="strokes"></div>
</div>

</body>