2016-02-03 75 views
0

我一直在經歷The Little Schemer,我開始對如何處理負數有好奇。要弄清楚如何構建一個函數來確定一個數字是否爲負數或正數,似乎是一個很好的挑戰。確定一個函數中的數字是否爲負數

到目前爲止,我有這樣的解決方案:

(define negative? 
    (lambda (a) 
    (cond 
     ((zero? a) #f) 
     (else (negativeHelper (sub1 a) (add1 a)))))) 

(define negativeHelper 
    (lambda (a b) 
    (cond 
     ((zero? a) #f) 
     ((zero? b) #t) 
     (else (negativeHelper (sub1 a) (add1 b)))))) 

這看起來是很好的工作,但我的問題是,如果有可能沒有輔助函數來糾正negative?

+1

爲什麼不乾脆,你知道的,檢查數量小於零? '(define(negative?n)(

+0

其實,我想確定一個數字是否爲負的原因是編寫了一個<負數的函數。本書從幾乎從頭開始編寫一些函數的精神,我想繼續嘗試。 – grossmae

+0

你可以簡化你的第一個過程爲'(定義負數?(lambda(a)(negativeHelper a a)))','negativeHelper'可以是負數的內部過程? '。 – uselpa

回答

2

這可能不是您正在尋找的答案,但「幫助」功能絕對沒有錯。

你可能會喜歡的negative?函數嵌套了壽

(define (negative? x) 
    (define (aux a b) 
    (cond ((zero? a) #f) 
      ((zero? b) #t) 
      (else (aux (sub1 a) (add1 b))))) 
    (aux x x)) 

驗證結果

(negative? 4) ; => #f 
(negative? -4) ; => #t 
(negative? 0) ; => #f 
相關問題