2017-09-18 9 views
0

私はラケットを使い慣れていません。私は、除数のリストとテストする数値のリストを取る関数を定義しようとしています。そして、直接再帰と関数をそれぞれの要素に対して 'drop-divisible'除数のリストラケット再帰

私は、数字と数字のリストを取る関数drop-divisibleを定義し、その数字によって「非自明に割り切れない」数字だけを含む新しいリストを返します。この機能は問題ではなく、機能します。だから、私が問題を抱えているのは、この機能を呼び出す機能とそれ自体です。

これは私が思いついたものです。私はこれが正しいとは限りませんが、私は何をすべきか分かりません。

(define (sieve-with divisors testlist) 
    (if (null? divisors) 
     '() 
     (begin 
     (drop-divisible (first divisors) testlist) 
       (sieve-with (rest divisors) testlist)))) 

答えて

0

あなたがtail recursionを使用する必要があります。

(define (sieve-with divisors list) 
    (cond [(empty? divisors) list] 
      [else (sieve-with (rest divisors) 
          (drop-divisible (first divisors) list))])) 

また、可能な限りbeginから離れて。機能的パラダイムに固執する。

+0

ありがとうございました!間違いなくそれを読むだろう。 – idkts