[英]Racket recursion
我是Racket的新手,我正在嘗試定義一個函數,該函數接受一個除數列表和一個數字列表進行測試,並對除數列表中的每個元素應用直接遞歸和一個“可拖放除數”函數。
我定義了一個函數drop-divisible,它接受一個數字和一個數字列表,然后返回一個新列表,該列表僅包含那些不能被數字“不可平分”的數字。 此功能不是問題,它可以工作。 所以我要麻煩的是將要調用此函數的函數及其本身。
這是我想出的。 我可以想象這遠非正確,但我不知道該怎么辦。
(define (sieve-with divisors testlist)
(if (null? divisors)
'()
(begin
(drop-divisible (first divisors) testlist)
(sieve-with (rest divisors) testlist))))
您需要使用尾遞歸 :
(define (sieve-with divisors list)
(cond [(empty? divisors) list]
[else (sieve-with (rest divisors)
(drop-divisible (first divisors) list))]))
另外,請盡可能遠離begin
。 堅持功能范式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.