比尔盖*_*尔盖子 2 lisp scheme greatest-common-divisor
我今天刚开始学习Scheme.
我写了一个函数gcd()
,但它总是返回0
.
(define (gcd a b)
(cond (= b 0)
(a)
(else ((gcd b (modulo a b))))
)
)
Run Code Online (Sandbox Code Playgroud)
为什么我错了?
这应该解决问题:
(define (gcd a b)
(cond [(= b 0) a]
[else (gcd b (modulo a b))]))
Run Code Online (Sandbox Code Playgroud)
你在括号之间错误地包围了一些表达式,并且表达式中缺少一些括号cond
.
请注意,在Scheme中,当你在括号中包含某些东西时,说(a)
你告诉解释器:a
是一个没有参数的过程,我想调用它,而这不是这里的情况,a
只是一个数字.
另外,为了便于阅读,最好使用[]
而不是()
分隔cond
表达式中的每个条件,如上面的代码所示 - 但不要忘记它们,它们是强制性的,在你的代码中你忘了它们第一个条件.