我試圖了解教科書中給出的計數偶數函式是如何作業的,但我不確定我是否完全理解它。
我在代碼旁邊的注釋中提供了我對該函式的理解。有人可以解釋正在發生的事情并在此功能的每個步驟中糾正我。
而且我不明白這個函式是如何遞回的。基本情況是什么?
(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) ) )
uj5u.com熱心網友回復:
在遞回函式中,通常有兩種情況:
- 結果是對同一函式的呼叫
- 結果是一個簡單的值,基本情況
您可以使用 . 在兩種情況之間進行選擇if。
因此,基本情況是:
(if (and (number? x) (even? x))
1
0) ) )
遞回情況是:
( (count-evens (car x))
(count-evens (cdr x)))
注釋:
- 引數
x不需要是一個串列。pairs?測驗串列。如果它只是一個值,那么我們就有了基本情況。如果是偶數,則結果為一,否則為零。 - 如果引數
x是一個串列,我們將它分成兩部分,頭部 (car) 和尾部 (cdr)。頭部只是一個值,所以當我們重新運行count-evens它時,我們最終得到了基本情況。 - 尾部被傳遞給
count-evens它,它一次又一次地切掉一個值,直到我們在car和 中的空串列中有一個值cdr。在基本情況下,第一個值被評估為偶數,而空串列總是被評估為零。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/435098.html
下一篇:尾呼叫平方和遞回函式球拍
