无论如何都要编写下面的代码,以便不必制作一个列表,以后我们必须使用该元素吗?
(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))
答案 0 :(得分:2)
正如@Sylwester所提到的,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))))