计划并让错误
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 中编程。
通常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
中具有特殊含义,因此它不能单独工作。
【讨论】:
我不擅长从一般例子中学习。你有什么具体的吗?为什么认为没有身体? @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 时我触摸到了它。现在修复:-)以上是关于计划并让错误的主要内容,如果未能解决你的问题,请参考以下文章
windows任务计划程序是怎么回事,有啥用途,该怎么设置??
在asp.net mvc 3中的后台作业/计划任务中发送电子邮件