2016-04-27 24 views
0

這是工作代碼調用+/-計算,它返回(calculate '(3 2 1) 0 0) -> 0(calculate '(7 5 1 2) 0 0) -> 1如何從Scheme中的遞歸調用中獲得#t和#f的返回值?

我想實現#F#T結果。先謝謝你。

(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))))) 

回答

1

沒有暗示你會希望它評估爲#t#f什麼樣的價值觀,但本質是使你的calculate一個幫手,並通過分析結果做邏輯:

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

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

感謝莫拉萊斯: (cond((null?list)0) 如果我們初始值列表爲零,那麼我們可以有正面和負面的返回值,所以我想得到#t爲正(真)和# f爲否定e(false)在lambda函數中使用條件。 – Pat