具有多参数的gcd和lcm方案,DRrack


(define (gcd a b)
(if (= b 0)
a
(gcd b (remainder a b))))

我们都知道这个著名的函数,我知道如果我想要一个(gcd a b c(是(gcd ab c(=(gcda(gcd b c((。但我需要真正看到向我展示如何实现通用函数的代码,因为我没有写很多不同的函数定义,我只需要一个包含无限参数的函数,实际的球拍gcd和lcm函数已经做到了,但我不知道如何做到。

因此,您正在搜索原本是二元gcd函数的变元(变量数或自变量(版本。

使用gcd可以执行:

(define (gcd* . args)  ;; gcd over a variable number of arguments
(foldl gcd 0 args))

现在,你可以做:

(gcd* 33 121 209) ;;=> 11

在参数列表中使用.,使其可以接受列表中的可选参数。如果有其他参数,请递归。

(define (gcd a b . more)
(cond ((pair? more) (gcd a (apply gcd b more))
((= b 0) a)
(else (gcd b (remainder a b)))))

最新更新