scheme - 从列表中删除奇数原子

时间:2014-11-11 03:50:25

标签: scheme

我觉得我很接近,但我似乎无法做到这一点。有什么想法吗?

离)

(removeOdd'(8 3(3 7)5))=> (8,())

(removeOdd'(5 5 2))=> (2)

 (define (removeOdd y)
   (if (null? y) '()
   (if (= (remainder (car y) 2) 0)
       (cons (car y) (removeOdd (cdr y)))
       (cons removeOdd (cdr y)))
   ))

这可能不适用于列表在另一个列表中的情况,但我更关心的是能够返回我使用'cons'制作的列表

编辑 - 如果我将cons切换到列表,它也不会完全返回列表。

2 个答案:

答案 0 :(得分:2)

(define (remove-odd y)
  (cond
    ((null? y) '())
    ((pair? (car y)) 
     (cons (remove-odd (car y)) (remove-odd (cdr y))))
    ((= (remainder (car y) 2) 0) 
     (cons (car y) (remove-odd (cdr y))))
    (else (remove-odd (cdr y)))))

答案 1 :(得分:0)

(define (removeOdd y)
   (if (null? y) 
     '()
      (if (atom? (car y))
         (if (= (remainder (car y) 2) 0)
           (cons (car y) (removeOdd (cdr y)))
           (removeOdd (cdr y))
          )
       (cons (removeOdd (car y)) (removeOdd (cdr y)))
 ))

我实际上不记得如何检查某些东西是否是原子,但这正是你所需要的。

相关问题