Scheme 在方案中计算偶数
我检查了偶数,现在我不知道如何通过调用count\u even函数来计算这些偶数。有人能帮我弄清楚吗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
(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
真的没有用吗?你的函数会返回什么?它会返回任何(甚至过滤?…)
不会返回的内容吗?