这个计数偶数球拍功能是如何工作的?
How does this count-even racket function work?
我正在尝试了解课本中给出的偶数函数是如何工作的,但我不确定我是否完全理解它。
我在代码旁边的注释中提供了我对该函数的理解。谁能解释一下这个函数的每一步发生了什么并纠正我。
而且我不明白这个函数是如何递归的。基本情况是什么?
(define (ce x) ; x is an argument that takes in a list
(if (pair? x) ; I don't understand why this is here
(+ (ce (car x)) ; Add the resuls of recursive call together (0 or 1)
(ce (cdr x)))
(if (and (number? x) (even? x)) ; if x is a number and x is even then return 1 ? Else return 0 ?
1
0) ) )
在递归函数中通常有两种情况:
- 结果是对同一函数的调用
- 结果是一个简单的值,基本情况
您可以在 if
的两种情况之间进行选择。
因此基本情况是:
(if (and (number? x) (even? x))
1
0) ) )
递归情况是:
(+ (count-evens (car x))
(count-evens (cdr x)))
评论:
- 参数
x
不需要是一个列表。 pairs?
测试列表。如果它只是一个值,那么我们就有了基本情况。如果是偶数,则结果为 1,否则为 0。
- 如果参数
x
是一个列表,我们将它分成两部分,头部(car
)和尾部(cdr
)。 head 只是一个值,因此当我们在其上重新运行 count-evens
时,我们最终得到基本情况。
- 尾部被传递给
count-evens
,它会一次切掉一个值,直到我们在 car
中有一个值,在 cdr
中有一个空列表。在基本情况下,第一个值评估为偶数,空列表始终评估为零。
我正在尝试了解课本中给出的偶数函数是如何工作的,但我不确定我是否完全理解它。
我在代码旁边的注释中提供了我对该函数的理解。谁能解释一下这个函数的每一步发生了什么并纠正我。
而且我不明白这个函数是如何递归的。基本情况是什么?
(define (ce x) ; x is an argument that takes in a list
(if (pair? x) ; I don't understand why this is here
(+ (ce (car x)) ; Add the resuls of recursive call together (0 or 1)
(ce (cdr x)))
(if (and (number? x) (even? x)) ; if x is a number and x is even then return 1 ? Else return 0 ?
1
0) ) )
在递归函数中通常有两种情况:
- 结果是对同一函数的调用
- 结果是一个简单的值,基本情况
您可以在 if
的两种情况之间进行选择。
因此基本情况是:
(if (and (number? x) (even? x))
1
0) ) )
递归情况是:
(+ (count-evens (car x))
(count-evens (cdr x)))
评论:
- 参数
x
不需要是一个列表。pairs?
测试列表。如果它只是一个值,那么我们就有了基本情况。如果是偶数,则结果为 1,否则为 0。 - 如果参数
x
是一个列表,我们将它分成两部分,头部(car
)和尾部(cdr
)。 head 只是一个值,因此当我们在其上重新运行count-evens
时,我们最终得到基本情况。 - 尾部被传递给
count-evens
,它会一次切掉一个值,直到我们在car
中有一个值,在cdr
中有一个空列表。在基本情况下,第一个值评估为偶数,空列表始终评估为零。