编写一个吃掉一个Nat并返回一个(Nat列表)的函数,该函数包含1到n之间的数字,这些数字可以被2、3和5之一整除

时间:2019-06-12 03:52:19

标签: list racket

写一个函数(fff n),该函数消耗一个Nat并返回一个(Nat列表),其中包含1到n之间的所有数字,这些数字可以被2、3和5之一整除。

在n = 10的情况下,至少可被这些值之一除的数为{2,3,4,5,6,8,9,10}。

但是6和10可被其中两个数字整除。所以(fff 10)=>(清单2 3 4 5 8 9)

到目前为止,我有

;; q2

;;(divisible? n d) returns true if no remainder exists when d is divided by n
;;divisible?: Nat-> Num
;;Examples

(check-expect (divisible? 8 4) #true )

(define (divisible? n d) (= 0 (remainder n d)))

;;
(define (multiple-235? n)
  (cond
   ((divisible? n 2) #true)
   ((divisible? n 3) #true)
   ((divisible? n 5) #true)))

我不确定如何设置要检查的1到n的范围,并且我不确定如何过滤列表以仅包含可被2、3或5整除的值。只能被其中之一整除。

1 个答案:

答案 0 :(得分:0)

只需使用filter并使用PetSerAl的方法(或使用他的解决方案)修复您的multiple-235?

(define (multiple-235? n)
  (= 1 (count (λ (d) (divisible? n d))
              '(2 3 5))))

(define (fff n)
  (filter multiple-235? (range 1 (add1 n))))