Напишите функцию, которая ест Nat и возвращает (список Nat), содержащий числа от 1 до n, которые делятся ровно на одно из 2, 3 и 5. - PullRequest
0 голосов
/ 12 июня 2019

Напишите функцию (fff n), которая потребляет Nat и возвращает (listof 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 голосов
/ 12 июня 2019

Просто используйте фильтр и исправьте multiple-235?, используя подход PetSerAl (или используйте его решение):

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

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