我正在尝试创建一个辅助函数,它传递的函数甚至是偶数?还是奇怪的?并计算列表中出现的次数 . 我似乎开发了完美的逻辑,但我得到一个错误(在底部),但无法弄清楚为什么 . 我传递'(cdr L)作为一个字符串,并把它的汽车用作一个整数,为什么它会说给'cdr? L应该是一个列表,'(cdr L)应该是一个列表..为什么这不起作用?
(define (fhelper F L )
(if (> (length L) 1)
(if (F (car L)) (+ 1 (fhelper F '(cdr L)))
(+ 0 (fhelper F '(cdr L))) )
(if(F (car L)) 1
0
)
)
)
(fhelper even? '(1 2 3 4 ))
. . even?: contract violation
expected: integer
given: 'cdr
我试过测试看到(甚至?(car'(1 2))返回#f所以我知道它不是我的(F(车辆L))部分的问题,所以看起来好像递归调用正在应用F '(cdr L)而不是使用那些作为参数,我没有得到,因为我三重检查文档,似乎应该工作?
2 回答
正如我在评论中写的那样,您不能引用
(cdr L)
,因为您希望执行调用 .您似乎对您的代码非常满意,但它并不是非常惯用的;应该看起来像
或者,作为尾递归程序:
如果您熟悉它,请使用
foldl
的另一个解决方案: