Scheme - 我的gcd()总是返回零

比尔盖*_*尔盖子 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)

为什么我错了?

Ósc*_*pez 8

这应该解决问题:

(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表达式中的每个条件,如上面的代码所示 - 但不要忘记它们,它们是强制性的,在你的代码中你忘了它们第一个条件.