方案并让错误

时间:2015-03-17 09:21:02

标签: scheme lisp let

我不能为我的生活找出这个代码产生错误的原因。 这是错误:

  

让*:错误的语法(缺少正文):(让*((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)))))))))))))

1 个答案:

答案 0 :(得分:3)

您的代码中有很多语法错误。我建议您安装一个与括号匹配并正确识别代码的IDE,例如DrRacket。 DrRacket支持R5RS和R6RS,因此您仍然可以使用DrRacket在Scheme中编程。

通常letlet*letrec的格式如下:

(let ((var expression) ...)
  body)

letrecletrec*中,表达式看起来像(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))

elsecond中具有特殊含义,因此它本身并不起作用。