Схема: функция, возвращающая список номеров - PullRequest
1 голос
/ 01 февраля 2011

Написать функцию (pick-numbers-simple L).

L - простой список, который не содержит вложенных списков.

Результатом функции является список чисел в L.

Порядок появления чисел в списке результатов должен быть таким же, как в L. Например, результат (pick-numbers-simple (list a b 1 2 c 3 d)) должен быть (1 2 3).

У меня есть много из них, чтобы написать, мне просто нужно начать. Если я смогу получить помощь по этому вопросу, я сделаю все остальное.

Ответы [ 3 ]

3 голосов
/ 01 февраля 2011

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

После того, как вы это сделаете, все должно быть довольно просто: возвращаемое значение - это список, составленный из текущего элемента (если и только еслиего номер), следуя той же функции, действующей в оставшейся части списка.

2 голосов
/ 01 февраля 2011

Чтобы уточнить ответ @Jerry Coffin, и поскольку вопрос помечен как «домашняя работа», вы можете написать pick-numbers-simple, например:

(define (pick-numbers-simple xs)
  (let loop ((acc (list))
             (xs xs))
    (cond
      ((empty? xs)
       (reverse acc))
      ((number? (car xs))
       (loop (cons (car xs) acc) (cdr xs)))
      (else
       (loop acc (cdr xs))))))

Или используя функцию filter:

(define (pick-numbers-simple xs)
  (filter number? xs))

Пример:

> (pick-numbers-simple (list 666 'foo 13 42 'bar))
(666 13 42)
0 голосов
/ 01 февраля 2011
...