Loops 带计数器的递归过程?

Loops 带计数器的递归过程?,loops,recursion,scheme,racket,counting,Loops,Recursion,Scheme,Racket,Counting,我应该编写一个递归算法来返回谓词“pred”为真的区间内的整数数 我成功地编写了从下界到上界的递归部分,但我不知道如何实现某种计数器,每当谓词对整数为真时,计数器递增1,因为我的代码是递归的(即,我一直调用相同的方法)。如果我在方法内部创建计数器,每次调用它时,计数器将初始化为0 到目前为止我写的是: (define count-true (lambda (pred lower upper) (if (or (> lower upper) (= lower upper))

我应该编写一个递归算法来返回谓词“
pred
”为真的区间内的整数数

我成功地编写了从下界到上界的递归部分,但我不知道如何实现某种计数器,每当谓词对整数为真时,计数器递增1,因为我的代码是递归的(即,我一直调用相同的方法)。如果我在方法内部创建计数器,每次调用它时,计数器将初始化为0

到目前为止我写的是:

(define count-true
  (lambda (pred lower upper)
    (if (or (> lower upper) (= lower upper))
        (pred lower)
        (count-true pred (+ lower 1) upper))))
原问题:

编写一个递归(非迭代)过程,
(count true pred lower-upper)
,类型为
(number->boolean),number,number->number
,该过程返回应用于该数字的谓词
pred
为真的范围内的整数数


在函数式编程中,不设置局部变量/计数器。您可以使用参数或返回值来传递(和命名)数据。在这种情况下,您可以使用返回值(如果您不想更改函数参数的数量以添加计数器)

因此,每当
pred
true
时,您返回从递归调用中接收到的值,该值以
1
递增,或者返回接收到的值

(定义count true
(lambda(pred?下部-上部)
(如果(或(>上下)(=上下))
0
(如果(pred?较低)
(+1(计数真实预测值)(+1下)上))
(计算真实预测值?(+下1)上()())))
评论: 我将
pred
更改为
pred?
,因为它是一个谓词,所以它使代码更具可读性。您还可以简化此代码,首先调用
count true
,然后使用
if
来决定如何处理返回值。第一个
if
with
子句也可以使用
=
简化。如果你想学习列表、数字等的递归,《小阴谋家》是一本很棒的书