方案中的嵌套函数
Nested functions in scheme
我是方案语言的新手,正在尝试执行这段使用内部函数计算第 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)))
首先,为什么在fibo
中使用长版而在helperFunction
中使用短版?例如。
(define long-version (lambda (arg) arg))
(define (short-version arg) arg)
这些都是一样的。书籍经常使用长版本来指出函数是值,名称是绑定,就像变量一样,但是当您已经开始使用短版本时,使用短版本是很实用的。
包装函数内容的 begin
是不必要的,因为所有函数都有显式 begin
。
一个 if
你只有一个测试和一个 then 子句将 return 当测试为假时选择的实现值。我倾向于使用符号 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
而不是 undefined。
(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
我是方案语言的新手,正在尝试执行这段使用内部函数计算第 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)))
首先,为什么在fibo
中使用长版而在helperFunction
中使用短版?例如。
(define long-version (lambda (arg) arg))
(define (short-version arg) arg)
这些都是一样的。书籍经常使用长版本来指出函数是值,名称是绑定,就像变量一样,但是当您已经开始使用短版本时,使用短版本是很实用的。
包装函数内容的 begin
是不必要的,因为所有函数都有显式 begin
。
一个 if
你只有一个测试和一个 then 子句将 return 当测试为假时选择的实现值。我倾向于使用符号 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
而不是 undefined。
(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