我是计划语言的新手,并试图执行这个使用内部函数计算第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)))
答案 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