我不能为我的生活找出这个代码产生错误的原因。 这是错误:
让*:错误的语法(缺少正文):(让*((tempp2(p2)(letrec((mloop(p1 p2)(if(=(length p1)0))(否则if((=(长度p2)0)((set!p2(pn))(multiloop(cdr p1)(p2))))(否则(let *((prod(append(prod)(cons(*(coeff(car p1)) (coeff(car p2)))(+(expon(car p1))(expon(car p2))))))))(set!p2(cdr p2))(mloop(p1 p2))(简化(排序) newone))))))))))
以下是代码:
(define multiplyPoly (lambda (p1 p2)
(
(let* ((hardp2 (p2)
(letrec
((mloop (p1 p2)
(if (= (length p1) 0))
(else if ((=(length p2) 0) ((set! p2 (hardp2)) (multiloop (cdr p1) (p2))))
(else
(let* ([prod (append (prod) (cons(*(coeff(car p1)) (coeff(car p2))) (+(expon(car p1)) (expon(car p2)))))]))
(set! p2 (cdr p2))
(mloop (p1 p2))
(simplify (sort newone)))))))))))))
答案 0 :(得分:3)
您的代码中有很多语法错误。我建议您安装一个与括号匹配并正确识别代码的IDE,例如DrRacket。 DrRacket支持R5RS和R6RS,因此您仍然可以使用DrRacket在Scheme中编程。
通常let
,let*
和letrec
的格式如下:
(let ((var expression) ...)
body)
在letrec
或letrec*
中,表达式看起来像(lambda (arg ...) expression)
。
如果您使用(if (positive? x) - +)
之类的任何Scheme表达式并用额外的一对括号括起来,则将结果作为一个程序调用:((if (positive? -1) - +)) ; ==> 0
if
的工作原理如下:
(if predicate-expression
consequent-expression
alternative-expression)
如果需要嵌套,则需要使用嵌套if作为替代表达式。
(if predicate-expression
consequent-expression
(if predicate-expression2
consequent-expression2
alternative-expression))
如果你在那里筑巢,cond可能是一个更好的匹配。上面的表达式可能写成:
(cond (predicate-expression consequent-expression)
(predicate-expression2 consequent-expression)
(else alternative-expression))
else
在cond
中具有特殊含义,因此它本身并不起作用。