我正在尝试将斐波那契函数从python转换为scheme,
def fib(n):
if n == 1:
return 0
if n == 2:
return 1
return fib(n-1) + fib(n-2)
到
(define (fib n)
(if (= n 1)
0)
(if (= n 2)
1)
(+ fib (- n 1)) (fib (- n 2)))
我在这里收到错误,因为显然方案需要else
语句。但是,作为一个新手计划学习者,我无法弄清楚如何用else语句来创建它。有人可以帮忙吗?谢谢。
答案 0 :(得分:4)
在某些Scheme解释器中(特别是:在Racket中),所有if
表达式必须包含两部分:结果和替代(else
部分)。因此,要修复代码,您应该嵌套if
这样的表达式(并注意缩进和关闭括号的推荐方法):
(define (fib n)
(if (= n 1)
0
(if (= n 2)
1
(+ (fib (- n 1)) (fib (- n 2))))))
但说实话,当有两个以上的条件时,你应该使用cond
而不是嵌套if
,它会更容易编写并且更容易阅读:
(define (fib n)
(cond ((= n 1) 0)
((= n 2) 1)
(else (+ (fib (- n 1)) (fib (- n 2))))))
为了完整起见:对于那些真正想要使用if
但没有else
部分的情况,您可以使用when
。还有一点挑剔:定义fibonacci
的常用方法是在0
为n
时返回0
,如果1
则返回n
是1
;因为它是你的实现将返回不正确的结果。
答案 1 :(得分:1)
尝试
(define (fib n)
(if (= n 1)
0
(if (= n 2)
1
(+ (fib (- n 1)) (fib (- n 2))))))
语法为:
(if predicate consequent alternative)
,例如
(if (> 3 2) 'yes 'no)
但我建议您在案例中使用cond