Список определения ракетки - PullRequest
1 голос
/ 14 июня 2019

Мне нужно решить задачу с использованием языка Ракетки.По заданному списку я должен создать новый список, содержащий только те элементы, у которых деление на 10 не осталось.

Мой код пока:

(define (brel x sp)
   (cond ((null? sp) 0)
         (( = (remainder (car sp) 10) 0) (car sp))
         (else (brel x (cdr sp)))))

(define (spbr L)
  (define (f l1)
    (if (null? l1) '()
     (cons (brel (car l1) L) (f (cdr l1)))))
 (f L))
(spbr (list 50 5 3))

Дайте код, который в настоящее время считает каждый повтор элементов в первомперечислите и добавьте их в новый.Что я должен изменить, чтобы это работало?

1 Ответ

1 голос
/ 14 июня 2019

Вам не нужна вспомогательная процедура, просто создайте новый список только с элементами, которые удовлетворяют условию:

(define (spbr L)
  (cond ((null? L) '())
        ((= (remainder (car L) 10) 0)
         (cons (car L) (spbr (cdr L))))
        (else
         (spbr (cdr L)))))

Использование процедуры filter было бы более идиоматичным:

(define (spbr L)
  (filter (lambda (e) (zero? (remainder e 10)))
          L))

В любом случае, работает как положено:

(spbr '(50 5 3 70))
=> '(50 70)
...