方案中的嵌套函数

时间:2017-03-31 10:20:05

标签: scheme brackets

我是计划语言的新手,并试图执行这个使用内部函数计算第n个斐波那契数列的代码。

由于某种原因它不适合我,我想得到一些帮助。 谢谢。

    (define fibo (lambda (n)
      (define (helperFunction n n1 a_n)
        (begin
        (display a_n)
        (newline)
        (if (> n 1)
        (helperFunction (- n 1) (+ n1 a_n) n1))))
       (helperFunction n 1 1)))

1 个答案:

答案 0 :(得分:1)

首先,为什么要使用fibo中的长版本和helperFunction中的简短版本?例如。

(define long-version (lambda (arg) arg))
(define (short-version arg) arg)

这些都是一样的。书籍经常使用长版本指出函数是值,名称是绑定,就像变量一样,但是当你已经开始使用短版本时它很实用。

包含函数内容的begin是不必要的,因为所有函数都有明确的begin

if只有test和then子句,当测试为false时,将返回实现选择的值。我倾向于使用符号undefined来对未定义的值没有任何意外。

您需要正确缩进代码。我使用DrRacket并按CTRL + I.有了这些,我得到你的代码:

(define (fibo n)
  (define (helperFunction n n1 a_n)
    (display a_n)
    (newline)
    (if (> n 1)
        (helperFunction (- n 1) (+ n1 a_n) n1)
        'undefined))
  (helperFunction n 1 1))

所以试试吧:

(fibo 1) ; ==> undefined

从查看代码看是有道理的。它几乎不正确,但它完成了它的指示。如果是2怎么办?

(fibo 2) ; ==
(helperFunction 1 2 1) ==> undefined

我认为您的问题是,您应该使用n1而不是未定义。

(define (fibo n)
  (define (helperFunction n n1 a_n)
    (display a_n)
    (newline)
    (if (> n 1)
        (helperFunction (- n 1) (+ n1 a_n) n1)
        n1))
  (helperFunction n 1 1))

关于功能的说明。一个standard fibonacci goes like 0,1,1,2,3,5,该函数通常为零索引,以便:

(fib 0) ; ==> 0
(fib 1) ; ==> 1
(fib 10) ; ==> 55