将列表的两个部分作为一对返回

时间:2018-10-19 02:02:25

标签: scheme

在我的程序中,我应该编写一个函数,将列表分为偶数和奇数。问题是输出/语法不正确。测试示例((1 3) (2 4))时得到(split '(1 2 3 4))。输出需要看起来像((1 3) 2 4)

这是我的代码:

(define (split l)
  (define (odd l)
    (if (null? l) '()
        (if (null? (cdr l)) (list (car l))
            (cons (car l) (odd (cddr l))))))
  (define (even l)
    (if (null? l) '()
        (if (null? (cdr l)) '()
            (cons (cadr l) (even (cddr l))))))
  (cons (odd l) (cons (even l) '())))

1 个答案:

答案 0 :(得分:0)

(even l)已经是一个列表。您无需将其包装在其他缺点中。 下面的代码应该可以工作。

(define (split l)
  (define (odd l)
    (if (null? l) '()
        (if (null? (cdr l)) (list (car l))
            (cons (car l) (odd (cddr l))))))
  (define (even l)
    (if (null? l) '()
        (if (null? (cdr l)) '()
            (cons (cadr l) (even (cddr l))))))
  (cons (odd l) (even l)))