2017-10-10 95 views
0

我正在创建一个尾递归函数,它通过传递一个系数列表和一个x值来计算一个多项式。例如:评估x^3 + 2x^2 + 5,因此用户可以在函数调用(poly'(5 0 2 1)1)中通过列表'(5 0 2 1) )。关于Scheme尾递归函数的语法错误

我想不通,为什么我收到以下错误:

if: bad syntax in: (if (null? (cdr lst)) (+ total (car lst)) eval-poly-tail-helper ((cdr lst) x (+ (* (expt x n) (car lst)) total) (+ 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调试器,或者至少添加调试打印。

+0

谢谢,但运行后我收到以下错误。 申请:不是程序; 预计可应用于参数 的程序:(0 4 1) 参数...: – Chriskt

+0

无视。我确实发现了这个错误,并且您使用更好的编辑器是正确的。 – Chriskt