Чтение и воссоздание списка на основе его значений - PullRequest
0 голосов
/ 16 ноября 2010

Я хочу создать подмножество моего списка на основе его значений.Например:

List (AA AB BA DC AD)

Мне нужен список, в котором есть все значения атомов, начиная с 'A'. Ответ должен быть таким:

(AA AB AD)

Я могу сделать это в настоящее время, пройдячерез весь список и преобразование каждого значения в другой список и чтение первого значения, а затем воссоздание списка.

Это очень сложное решение.

Есть ли какой-либо метод в схеме, который может читатьпервый символ строки в списке и удалить элемент?

1 Ответ

5 голосов
/ 16 ноября 2010

Проверьте, есть ли в вашей реализации схемы процедура с именем filter или что-то в этом роде. Если нет, вы можете определить один самостоятельно:

(define (filter p lst)
  (let loop ((lst lst) (res ()))
    (if (null? lst)
        (reverse res)
        (if (p (car lst))
            (loop (cdr lst) (cons (car lst) res))
            (loop (cdr lst) res)))))

Использование фильтра для получения всех атомов, начинающихся с 'A':

> (filter (lambda (x) (char=? (string-ref (symbol->string x) 0) #\A)) 
          '(AA AB BA DC AD))
=> (AA AB AD)
...