【发布时间】:2020-03-22 20:50:05
【问题描述】:
应该做什么功能的例子: (列表 3 4 6 9 7) ←→ 3x^4 + 4x^3 + 6x^2 + 9x + 7
到目前为止我所拥有的:
(define (poly-eval x numlist)
(compute-poly-tail x numlist 0 0))
(define (compute-poly-tail xn list n acc)
(cond
[(null? list) acc]
[else (compute-poly-tail (first list) (rest list)
(+ acc (* (first list) (expt xn n))) (+ n 1))]))
(check-expect(poly-eval 5 (list 1 0 -1)) 24)
(check-expect(poly-eval 0 (list 3 4 6 9 7)) 7)
(check-expect(poly-eval 2 (list 1 1 0 1 1 0)) 54)
预期结果:
(check-expect(poly-eval 5(list 1 0 -1)) 24)
(check-expect(poly-eval 0 (list 3 4 6 9 7))7)
(check-expect(poly-eval 2 (list 1 1 0 1 1 0)) 54)
我收到运行时错误。有人可以发现我做错了什么。我不知道为什么我会得到这些结果。
【问题讨论】:
-
我不明白
xn参数在做什么。它以x开头,所以我希望它始终保持与x相同的值,但在递归调用中它得到(first list)。那后面的条款怎么还知道x是什么? -
接下来我不明白的是
n。n从零开始,但对于最重要的多项式,我希望n以多项式的次数开始,就像它是x^2 + 2*x + 1我希望n开始作为2,每次递归调用都会下降一个 -
那么你把
acc作为最后一个参数,所以我猜(+ acc ....)表达式也应该去,因为最后一个参数是递归调用