2017-09-18 6 views
0

Ich bin neu in Racket und ich versuche, eine Funktion zu definieren, die eine Liste von Teilern und eine Liste von Zahlen zu testen, und direkte Rekursion und eine Funktion 'drop-teilbar' für jedes Element in die Liste der Teiler.Racket Rekursion

Ich definierte eine Funktion drop-teibar, die eine Zahl und eine Liste von Zahlen nimmt, und gibt eine neue Liste zurück, die nur die Zahlen enthält, die nicht "nicht-trivial teilbar" sind. Diese Funktion ist nicht das Problem, es funktioniert. Was ich damit zu tun habe, ist die Funktion, wer diese Funktion und sich selbst nennen wird.

Hier ist, was ich mir ausgedacht habe. Ich kann mir vorstellen, dass das alles nicht stimmt, aber ich habe keine Ahnung, was ich tun soll.

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

Antwort

0

Sie müssen tail recursion verwenden:

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

Auch bleiben weg von begin so viel wie möglich. Bleiben Sie beim funktionalen Paradigma.

+0

Vielen Dank! Ich werde das unbedingt lesen. – idkts