具有多个参数的 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
(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