Scheme 在方案中计算偶数

Scheme 在方案中计算偶数,scheme,Scheme,我检查了偶数,现在我不知道如何通过调用count\u even函数来计算这些偶数。有人能帮我弄清楚吗 (define (count_even l) (length (filter even? l))) (define (check_even lst) (cond ((null? lst) '()) ((not (pair? lst)) (if (even? lst) (list lst) '())) (else

我检查了偶数,现在我不知道如何通过调用count\u even函数来计算这些偶数。有人能帮我弄清楚吗

 (define (count_even l)
   (length (filter even? l)))

 (define (check_even lst)
    (cond ((null? lst) '())
       ((not (pair? lst))
          (if (even? lst) (list lst) '()))
          (else
             (append (check_even (car lst))
             (check_even (cdr lst))))))
 (count_even lst)

您希望像这样调用您的
check\u even
函数:

 (define (count_even l)
    (length (filter_even l)))
但是,我建议您将名称更改为
filter\u even
,因为您的函数所做的是过滤,而不是检查(检查是
even?
所做的)

此外,在
检查\u偶
中,您可以执行一些不必要的额外计算,例如
附加
(除非您期望嵌套列表),额外的
如果
(您已经有了
条件
,因此不需要
如果
),当您已经知道只剩下一个元素时,再次调用
check_even
函数:

 (define (check_even lst)
    (cond ((null? lst) '())
          ((even? (car lst)) (cons (car lst) (check_even (cdr lst))))
          (else (check_even (cdr lst)))))
要测试使用:

(check_even (list 1 2 3 4 5))

错误来自执行函数的最后一行:
(count_even lst)
,因为此时
lst
不是变量。您需要像这样传递一个实际值:
(count\u even(list 1 2 3 4 5))
注意,当您的
check\u even
函数返回一个只有偶数的列表时,您应该使用
check\u even
而不是
过滤器(您的函数已经进行了过滤).您是否尝试过OP的
'((2)(3)(4))
进行偶数检查?
append
真的没有用吗?你的函数会返回什么?它会返回任何
(甚至过滤?…)
不会返回的内容吗?