Как я могу создать список чисел, которые не делятся на 3 в схеме? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь создать список чисел, которые не делятся ни на одно выбранное число, и я должен использовать процедуру filter, но я не знаю, как использовать с 2 процедурами zero? и remainder. Здесь мои испытания:

(define (remove-divisible lst value)
  (filter zero? (remainder lst value)))

или

(define (remove-divisible lst value)
  (filter (zero? (remainder value)) lst))

но, видимо, я получаю ошибку из-за структуры процедуры фильтрации. Как я могу использовать это правильно?

1 Ответ

0 голосов
/ 29 октября 2018

Первый аргумент filter - это функция, которая решает, должен ли элемент быть сохранен или отфильтрован.

В вашем случае функция должна возвращать #t для чисел, не кратных данному значению, и #f для чисел, кратных этому.

Вот вспомогательная функция для генерации необходимых функций:

(define (not-divisible-by divisor)
  (lambda (dividend)
    (not (zero? (remainder dividend divisor)))))

Теперь определить нужную функцию просто:

(define (remove-divisible lst value)
  (filter (not-divisible-by value) lst))

Конечно, вы можете пропустить вспомогательную функцию, если пожелаете:

(define (remove-divisible lst value)
  (filter (lambda (x) (not (zero? (remainder x value)))) lst))

Я бы порекомендовал использовать более читабельный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...