(remove-if f lst) функция на схеме - PullRequest
0 голосов
/ 27 марта 2019

(remove-all x lst) функция, которая удалила все, что в lst было равно x.Для этой проблемы напишите схему функции (remove-if f lst, которая возвращает список со всеми элементами, для которых (f x) является истинно удаленным.

У меня есть простой код удаления всего:

(define (remove-all x ls)
  (if (null? ls)
      '()
      (if (eq? x (car ls))
          (remove-all x (cdr ls))
          (cons (car ls)
                (remove-all x (cdr ls))))))

Но как мне изменить его так, чтобы он принимал функцию и возвращал список с теми элементами, которые возвращают true, удалено?

1 Ответ

1 голос
/ 27 марта 2019

Просто передайте предикат сравнения в качестве параметра и замените жестко закодированный eq? на предикат:

(define (remove-if pred ls)
  (if (null? ls)
      '()
      (if (pred (car ls))
          (remove-if pred (cdr ls))
          (cons (car ls)
                (remove-if pred (cdr ls))))))

Или, что еще лучше, используйте filter-not в Racket:)

(filter-not even? '(1 2 3 4 5 6))
=> '(1 3 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...