2016-11-07 5 views
0

あとで私たちが要素を車に持っていなければならないリストを作る必要がないので、以下のコードを書いてもらえますか? @Sylwesterによって述べたよう車とリストがないようにコードを書くには?

(define (square-it l) 
    (map (lambda (x) (* x x)) l)) 

(define (sum-it l) 
    (foldl + 0 l)) 

(define (sum-of-squares n) 
    (sum-it (square-it (numbers n)))) 

(define (square-of-sum n) 
    (square-it (*list* (sum-it (numbers n))))) 

(- (*car* (square-of-sum 100)) (sum-of-squares 100)) 
+1

おそらく、あなたはそれがあることは明らかだから '平方it'に依存しているとは異なることを行う必要があります'(map square lst)'と '(square n)'は異なります。あなたは本当にあなたが選んだ解決策(XY)の問題ではなく、あなたの問題を説明する必要があります。 – Sylwester

答えて

1

square-itリストを二乗するのに有用であるが、単一の値を二乗するために、入力と出力は、それぞれの場合に異なっており、そしてsqrは単一の値を二乗するための正しい手順ではありません。これは、問題を解決するのに十分でなければならない:

(define (square-of-sum n) 
    (sqr (sum-it (numbers n)))) 

(- (square-of-sum 100) (sum-of-squares 100)) 

簡単な解決策はiterations and comprehensionsを使用し、独立してそれぞれの手順を定義することです。私たちは、車輪の再発明する必要はありません、唯一組込みプロシージャを使用して、値の範囲に渡って直接値を計算することができます

(define (sum-of-squares n) 
    (for/fold ([sum 0]) 
      ([i (in-range n)]) 
    (+ sum (sqr i)))) 

(define (square-of-sum n) 
    (sqr (apply + (range n)))) 
+0

@ X10Dこの問題やその他の回答が問題を解決する場合は、[受け入れる]ことを忘れないでください(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 ) –

関連する問題