2016-04-27 3 views
0

Dies ist Arbeitscode Aufruf +/- Berechnung, die (calculate '(3 2 1) 0 0) -> 0 und (calculate '(7 5 1 2) 0 0) -> 1 zurückgibt.Wie erhalten Sie den Rückgabewert als #t und #f von einem rekursiven Aufruf in Scheme?

Ich möchte als Ergebnis #f oder #t erreichen. Vielen Dank im Voraus.

(define calculate(lambda (List sum1 sum2) 
        (cond ((null? List)(if (> sum1 sum2) (- sum1 sum2) (- sum2 sum1))) 
        ((> (calculate (cdr List) (+ sum1 (car List)) sum2)(calculate (cdr List) sum1 (+ sum2 (car List)))) 
          (calculate (cdr List) sum1 (+ sum2 (car List)))) 
        (else (calculate (cdr List) (+ sum1 (car List)) sum2))))) 

Antwort

1

Es gibt keinen Hinweis, was Sie es #t oder #f bewerten Werte würden wollen, aber das Wesen wäre Ihre calculate ein Helfer und tun, um die Logik zu machen, indem das Ergebnis der Analyse:

(define (calculate lst sum1 sum2) 
    (define (calculate lst sum1 sum2) 
    ...) ; original implementation 

    (let ((result (calculate lst sum1 sum2))) 
    (if (zero? result) 
     #f 
     #t))) 
+0

Danke Morales: (cond ((null? List) 0) Wenn wir Anfangswert für Liste ist Null dann können wir positive und negative Rückgabewert haben. Also wollte ich #t für positiv (wahr) und # f für negativ e (falsch) unter Verwendung der Bedingung in der Lambda-Funktion. – Pat

Verwandte Themen