Scheme 计划和让错误
我一辈子都无法找出这段代码产生错误的原因。 以下是错误: let*:错误语法(缺少正文)in:(let*((tempp2(p2)(letrec)((mloop(p1p2)(if((length p1)0))(else if)(=(length p2)0)((set!p2(pn))(multiloop(cdr p1)(p2)))(else(let*((prod)(append(prod)(cons)((coeff(car p1)))(coeff(car))))(+(expon(car p1)))(expon(car))(expon(car);(expon(car);(car)p2);))))))(set!p2(cdr p2))(简化(排序newone(()()(())()))) 代码如下:Scheme 计划和让错误,scheme,lisp,let,Scheme,Lisp,Let,我一辈子都无法找出这段代码产生错误的原因。 以下是错误: let*:错误语法(缺少正文)in:(let*((tempp2(p2)(letrec)((mloop(p1p2)(if((length p1)0))(else if)(=(length p2)0)((set!p2(pn))(multiloop(cdr p1)(p2)))(else(let*((prod)(append(prod)(cons)((coeff(car p1)))(coeff(car))))(+(expon(car p1)))(
(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)))))))))))))
你的代码中有很多语法错误。我建议你安装一个IDE,它可以匹配括号并正确识别你的代码,比如。DrRacket支持R5RS和R6RS,所以你仍然可以使用DrRacket在Scheme中编程 通常,
let
、let*
和letrec
具有以下形式:
(let ((var expression) ...)
body)
在letrec
或letrec*
中,表达式看起来像(lambda(arg…)表达式)
如果您使用任何类似于(If(正数?x)-+)
的模式表达式,并用一对额外的括号将它们括起来,则您将调用结果作为过程:((If(正数?-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
-变量视为变量声明块。Scheme不是这样工作的,您最好的做法可能是忘记您已经了解的编程知识,并开始通过编写比此更小的Scheme程序来重新学习。不要使用set!
.那么如何声明变量呢?(let((varname1(+45))(varname2(list 45))(varname3100))(list varname1 varname2 varname3))
有3个变量,并在正文中列出了3个变量。这些变量在正文外不存在。@halfer这是一个打字错误。ø在挪威语键盘中紧靠着l,所以我想我在按l时触到了它。现已修复:-)