2016-11-07 1 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''에 의존하는 것보다 다른 일을한다 : 우리는 직접에만 내장 프로 시저를 사용하여 값의 범위의 값을 계산할 수, 바퀴를 재발견 할 필요가 없습니다 ''(사각형) '과'(사각 형)'은 다릅니다. 귀하가 선택한 솔루션의 문제점 (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) it;) –

관련 문제