如何编写代码,以便汽车和列表不在其中?

时间:2016-11-07 23:09:36

标签: functional-programming scheme racket

无论如何都要编写下面的代码,以便不必制作一个列表,以后我们必须使用该元素吗?

(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 个答案:

答案 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))))