2017-10-16 7 views
0

Ich versuche, eine Liste von Zahlen unter Verwendung der Rekursion in Schläger zu subtrahieren. Die Funktion geht wie:Subtraktion einer Liste von Zahlen im Racket

(define (sub lst) 
(cond [(empty? lst) 0] 
     [ else (- (first lst) (sub (rest lst)))])) 

Dies scheint nicht richtig zu sein als Schläger Subtraktion führt von links nach rechts. ZB:

(- 1 2 3 4 6) soll -14 sein. Aber wenn ich es in der gleichen Weise mache, wie in der Liste durch Rekursion geben, wie (list 1 2 3 4 6) gibt es das Ergebnis als 4. Wie kann ich das lösen?

Antwort

1

So Ihre Funktion tut dies:

(sub '(1 2 3))  ; == 
(- 1 (- 2 (- 3 0))) ; == 
(- 1 (- 2 3))  ; == 
(- 1 -1)   ; == 
; ==> 2 

Was Sie Bedürfnisse funktionieren zu tun, ist dies:

(- (- 1 2) 3) ; ==> -4 

Es gibt auch Sonderfälle für 0 und 1 Argument:

(sub '()) ; ==> 0 (identity of - is 0) 
(sub '(1)) ; ==> -1 (- identity 1) 
+0

Vielen Dank. Ich hab es geschafft. Also muss sich die Rekursion ändern? – user3607109

+0

@ user3607109 Ja. Die Operation muss von links nach rechts statt von rechts nach links erfolgen, so wie Sie es gemacht haben. – Sylwester

Verwandte Themen