我正在创建一个尾递归函数,通过传递一系列系数和一个x值来评估多项式。
示例:评估x ^ 3 + 2x ^ 2 + 5,因此用户可以在函数调用中传递列表'(5 0 2 1)和x像1(poly'(5 0 2 1)1)
我无法弄清楚为什么我会收到以下错误:
if:语法错误:(if(null?(cdr lst))(+ total(car lst)) eval-poly-tail-helper((cdr lst)x(+(*(expt x n)(car lst))总) (+ 1 n)))
(define (poly lst x)
(poly-assistant lst x 0 0))
(define (poly-assistant lst x total n)
(if (null? (cdr lst))
(+ total (car lst))
poly-assistant((cdr lst) x (+ (* (expt x n) (car lst)) total) (+ 1 n))))
答案 0 :(得分:1)
你需要在最后一行poly-assistant
之前留下一个左栏。
在Scheme中,函数应用程序以左边的paren开头。并且if
需要2或3个操作数。
使用能够匹配括号的更好的编辑器(例如emacs
)。
cdr
之前的两个左括号看起来很可疑。您可能只需要一个。
学习使用Scheme调试器,或者至少添加调试打印。