首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cond语句的意外行为

cond语句的意外行为
EN

Stack Overflow用户
提问于 2013-11-23 16:39:53
回答 2查看 43关注 0票数 0

我需要这样编写函数:如果它的参数小于3,它必须返回参数,否则它返回f(n-1) + f(n-2) + f(n-3)。函数必须生成迭代(而不是递归)过程。

现在,我有一个函数的变体:

代码语言:javascript
复制
(define (fi n)
    (define (fiHelper x1 x2 x3 c)
        (cond ((= c 2) x3)
            (else (fiHelper x2 x3 (+ x1 x2 x3) (- c 1)))))
    (cond ((< n 3) n)
        (else fiHelper 0 1 2 n)))

它总是返回我传递给它的n,不管我传递了什么,例如,如果我通过了10,它返回10,如果我通过了17,则返回17,等等。我用如下的if语句重写了它:

代码语言:javascript
复制
(define (fi n)
    (define (fiHelper x1 x2 x3 c)
        (cond ((= c 2) x3)
            (else (fiHelper x2 x3 (+ x1 x2 x3) (- c 1)))))
    (if (< n 3) 
        n
        (fiHelper 0 1 2 n)))

它的工作原理与预期一样--返回n等于1010。我不知道导致这种行为的condif之间有什么区别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-23 16:44:36

你想要的是(else (fiHelper 0 1 2 n))而不是(else fiHelper 0 1 2 n)。第一个表达式调用助手函数;第二个表达式只计算符号fiHelper, 0, 1, 2,得到最后一个的值。

票数 2
EN

Stack Overflow用户

发布于 2013-11-23 19:45:42

您代码中的错误是因为我不太容易找到。我在foo fiHelper中插入了一个“(显示"HelferFoo"),然后注意到这个foo从未被调用过。

乔治·福斯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20164912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档