具有多个参数的 gcd 和 lcm Scheme,DRracket

gcd and lcm with multiple parameters Scheme, DRracket

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

我们都知道这个著名的函数,我知道如果我想要一个 (gcd a b c) 就是 (gcd a b c)= (gcd a (gcd b c))。但我需要实际查看代码,告诉我如何实现一般功能,因为我没有写很多不同的功能定义,我只需要包含无限参数的代码,实际的球拍 gcd 和 lcm 功能已经完成那个,但我不知道如何。

在参数列表中使用 . 以允许它采用可选参数,这些参数将在列表中。如果有额外的参数,则递归。

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

因此,您正在搜索 otherwise diadic gcd 函数的可变参数(可变数字或参数)版本。

使用gcd你可以做到:

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

现在,您可以:

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