2016-10-13 5 views
0

Help!私は2つの入力の間のすべての数の合計を取る関数を書くことを試みている。2つの入力の間のすべての数値の合計をとる関数を書く

これまでのところ、私が持っている、

(define (sum-between x y)  
    (cond  
    [(= x y) x] 
    [((- x y) 0) 0] 
    [else (+ (+ x y) (sum-between (sub1 x) (sub1 y)))])) 

これは返す必要があります:

(check-expect (sum-between 0 2) 3) 

(check-expect (sum-between -1 1) 0) 

(check-expect (sum-between 7 7) 7) 

(check-expect (sum-between 1 10) 55) 

私はそれが無限ループで実行されないように、再帰的なケースを呼び出すするかどうかはわかりません。助言がありますか?ありがとう!

+0

ある手順のどのような '( - XY)'作ろう? 'x'と' y'の両方を減らすことによって、永遠に同じままになります。各ステップで最初と最後の合計を足し合わせることで、 '( - y x 1)'回のうちの1つをあまりにも多く追加します。教えてください、あなたは紙でそれをどうやってやりましたか? – Sylwester

答えて

0

組み込みプロシージャの使用はどうですか?これは簡単です:

(define (sum-between x y) 
    (apply + (range x (add1 y)))) 

しかし、私は、あなたが最初からこれを実装したいと思います。ここでの主なアイデアは、一方の値がもう一方の値に近づくようにしなければならないということです。エラーは、の両方ともです。代わりにこれを試してみてください:用/合計

(define (sum-between x y)  
    (cond  
    [(= x y) x] 
    [else (+ x (sum-between (add1 x) y))])) 
+0

ああ、大丈夫。それはたくさんの意味があります、ありがとう!私はアキュムレータ関数として考えることもしようとしていますが、2つのリストに対して2つの入力を取ろうとしているとき、どのように機能しますか? – abdabs78

0

も、ここで使用することができます。

(define (sum-between x y) 
    (for/sum ((i (in-range x (add1 y)))) 
    i)) 

(sum-between 0 2) 
(sum-between -1 1) 
(sum-between 7 7) 
(sum-between 1 10) 

出力:

3 
0 
7 
55 
関連する問題