2016-06-20 10 views
2

Ich versuche, eine Funktion in Schema zu machen, die rekursiv Werte auf eine leere Liste hinzufügt.Scheme - Hinzufügen von Werten zur Liste rekursiv

Ich habe eine leere Liste definiert:

(define empty '()) 

Und ich habe eine Funktion definiert, die Werte zur Liste hinzufügen sollte:

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (begin 
     (append empt x) 
     (recapp empt (- x 1))))) 

Als ich nach Schema (recapp leer 5) Ich betrete bekomme eine leere Liste, obwohl ich gerne hätte (1 2 3 4 5). Was ist das Problem?

Dank für die Unterstützung aus.

Antwort

1

Das Problem ist, dass (empt x anhängen) nicht den Wert von empt ändern. So sind vorbei Sie nur empt (Wert ‚()) durch recappX (ursprüngliches Argument Wert) mal.

(define (recapp empt x) 
    (if (= 0 x) 
     empt 
     (recapp (cons x empt) (- x 1)))) 

Ist näher an was Sie wollen. Beachten Sie auch die primative iota hat ähnliche Funktionen.

+2

'Iota' ist eigentlich kein Primitiv. Es wird von SRFI 1 zur Verfügung gestellt. Racket zum Beispiel stellt 'range' zur Verfügung (mit einer anderen Argumentreihenfolge als' iota'). –

+1

Danke !! Leider kann ich deine Antwort noch nicht nach oben abstimmen: / – Leero11