计划并让错误

Posted

技术标签:

【中文标题】计划并让错误【英文标题】:Scheme and let errors 【发布时间】:2015-05-19 15:50:21 【问题描述】:

我终其一生都无法找出这段代码产生错误的原因。 这是错误:

let*: 语法错误(缺少正文) in: (let* ((tempp2 (p2) (letrec ((mloop (p1 p2) (if (= (length p1) 0))) (else if ((= (长度 p2) 0) ((set!p2 (pn)) (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新的)))))))))))

代码如下:

(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】:

您的代码中有很多语法错误。我敦促您安装一个可以匹配括号并正确识别您的代码的 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 中具有特殊含义,因此它不能单独工作。

【讨论】:

我不擅长从一般例子中学习。你有什么具体的吗?为什么认为没有身体? @ZackSchwartz 因为let-表达式仅包含名称的绑定。它还需要一个主体,即表达式的值。 (let ((x 5) (y 3)) (+ x y)) 计算结果为 8,但 (let ((x 5) (y 3))) 无效。您似乎正在尝试编写 C 并将 let-variants 视为变量声明块。这不是Scheme 的工作方式,你最好的做法可能是忘记你已经知道的关于编程的知识,并通过编写比这更小的Scheme 程序开始重新学习。并且不要使用set! 那么如何声明变量呢? (let ((varname1 (+ 4 5)) (varname2 (list 4 5)) (varname3 100)) (list varname1 varname2 varname3)) 有 3 个变量并在正文中列出了 3 个。变量不存在于主体之外。 @halfer 打错字了。在挪威语键盘中,ø 位于 l 旁边,所以我想当我按下 l 时我触摸到了它。现在修复:-)

以上是关于计划并让错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从头开始构建API

表收集错误导致执行计划错误

windows任务计划程序是怎么回事,有啥用途,该怎么设置??

在asp.net mvc 3中的后台作业/计划任务中发送电子邮件

sql2008 自动备份计划失败 错误号:-1073548784

oracle选择了错误的执行计划,怎么办