(define generalized-triangular
(lambda (input n)
(if (= n 1)
1
(+ (input n) (generalized-triangular (- n 1))))))此程序设计为将一个数字和一个函数作为输入,并执行以下操作。
f(1) + f(2) + f(3)+ … + f(N).一个输入示例是:
(generalized-triangular square 3)错误消息:
if: bad syntax;
has 4 parts after keyword in: (if (= n 1) 1 (+ (input n) (generalized-triangular (- n 1))) input)发布于 2013-09-09 23:34:04
错误非常明显-- if表单在条件之后只能有两个部分--后件(如果条件为真)和替代项(如果条件为假)。也许你是这个意思?
(if (= n 1)
1
(+ (input n) (generalized-triangular input (- n 1))))我将input从原始代码移到了错误的位置,因为对generalized-triangular的调用需要两个参数,顺序是正确的。
对于记录:如果您需要在后果式或替代式中执行多个表达式(这不是您的问题的情况,但了解它是有用的),那么您必须将它们打包在一个begin中,例如:
(if <condition> ; condition
(begin ; consequent
<expression1>
<expression2>)
(begin ; alternative
<expression3>
<expression4>))或者,您可以使用具有隐式begin的cond
(cond (<condition> ; condition
<expression1> ; consequent
<expression2>)
(else ; alternative
<expression3>
<expression4>))发布于 2013-09-09 23:39:18
文字答案
您在问题中发布的代码很好:
(define generalized-triangular
(lambda (input n)
(if (= n 1)
1
(+ (input n) (generalized-triangular (- n 1))))))您的问题中的错误消息可能是这样的代码:
(define generalized-triangular
(lambda (input n)
(if (= n 1)
1
(+ (input n) (generalized-triangular (- n 1)))
input)))问题出在input上。if的形式为(if <cond> <then> <else>)。不包括if本身,它有3个部分。上面的代码提供了4。
真实答案
两点建议:
cond而不是if。球拍有一个非正式的风格指南,也推荐这样做。发布于 2013-09-10 06:36:39
这是尾部递归
(define (generalized-triangular f n-max)
(let loop ((n 1) (sum 0))
(if (> n n-max)
0
(loop (+ n 1) (+ sum (f n))))))https://stackoverflow.com/questions/18701802
复制相似问题