DrRacket - 为什么这个数字是否定的?

时间:2018-04-09 19:55:20

标签: scheme racket

所以我无法弄清楚为什么我的数字在这个函数中是负数。此外,计算的输入应该是相同的3的列表,如果有人可以给我一个手,那将非常感激。谢谢。

calculate获取列表中的第一个数字,然后将其乘以列表中的第二个数字,并从输入列表中减去第三个数字。

((calculate '(8 3 7)) '(4 8 2 9))应该返回'(29 41 23 44)

(define (calculateHelper n m o L)
  (if (null? L) empty
      (cons ((calculate n m o) (car L)) 
            (calculateHelper n m o (cdr L)))))

;((calculate 8 3 7) '(4 8 2 9))
(define (calculate n m o)
   (lambda (L)
     (if (list? L) (calculate n m o L)
         (- o (* m (+ n L))))))

1 个答案:

答案 0 :(得分:2)

除此之外,你的减法是倒置的。这应该有所帮助:

(define (calculate n m o)
  (lambda (L)
    (map (lambda (e)
           (- (* m (+ n e)) o))
         L)))

然后

> ((calculate 8 3 7) '(4 8 2 9))
'(29 41 23 44)

编辑:要使用列表调用calculate,您可以使用apply进行解构:

(define (calculate nums)
  (apply (lambda (n m o) 
           (lambda (L)
             (map (lambda (e)
                    (- (* m (+ n e)) o))
                  L)))
         nums))

然后

> ((calculate '(8 3 7)) '(4 8 2 9))
'(29 41 23 44)