数値 n が 2 つの平方の和として記述できるかどうかをテストするために、平方和関数を作成しました。私のコードは次のとおりです。
(define (square x) (* x x))
(define (sum-of-squares n)
(define (sum-of-squares-h k)
(cond ((= k n) #f)
((= n (+ (square(floor(sqrt k)))(square(floor(sqrt(- n k))))))#t)
(sum-of-squares-h (+ k 1))))
(sum-of-squares-h 1))
次のようなものをテストすると:
(sum-of-squares 1)
(sum-of-squares 2)
(sum-of-squares 4)
(sum-of-squares 8)
(sum-of-squares 10)
私の出力は次のとおりです。
#f
#t
2
2
#t
どこが間違っていましたか/これを修正するにはどうすればよいですか? この問題を解決する他の方法を見てきましたが、誰かが私がすでに持っているものを使って私を助けることができれば、それは素晴らしいことです. フロア機能に詳しくないので、使い方を間違えたのかもしれません。
編集 - いくつかの調整を加えたコード
(define (square x) (* x x))
(define (sum-of-squares n)
(define (sum-of-squares-h k)
(cond ((= k n) #f)
((< n 4) #f)
((= n (+ (square(floor(sqrt k)))(square(floor(sqrt(- n k))))))#t)
(sum-of-squares-h (+ k 1))))
(sum-of-squares-h 1))