2015-05-21 5 views
0

У меня есть список в Схеме, который содержит числа. Я написал функцию, которая принимает в качестве входных данных один номер и список объектов и проверяет, соответствует ли значение доверия объекту числу.Возврат элемента, а затем удаление элемента из списка в схеме

Как только я получу объект, значения доверия которого соответствуют указанному числу, я хочу удалить объект из списка после его возвращения. Как мне это сделать? Это мой код до сих пор:

(define (get-wordpair mi wordpairs) 
    (define current-wp (car wordpairs)) 
    (define confidence (tv-conf (cog-tv current-wp))) 
    (if (equal? confidence mi) 
     current-wp 
     (get-wordpair mi (cdr wordpairs)))) 
+1

ввода пробы и ожидаемого результата было бы полезно. –

ответ

1

Использование filter для удаления из списка тех объектов, значение доверия совпадает с заданным числом:

(filter (lambda (e) 
      (not (equal? (tv-conf (cog-tv e)) mi))) 
     wordpairs) 

С другой стороны, это выражение будет возвращать список с теми объектами, которые у есть ожидаемая уверенность (возможно, что есть больше чем один!)

(filter (lambda (e) 
      (equal? (tv-conf (cog-tv e)) mi)) 
     wordpairs) 

Итак, звоните выражения для получения двух списков с требуемыми объектами, если нормально выполнить два прохода по списку ввода. Для более эффективного решения, которое выполняет один проход проверки документации интерпретатора, чтобы увидеть, если он обеспечивает partition процедуру, или использовать SRFI-1:

(let-values (((with-confidence no-confidence) 
       (partition (lambda (e) 
          (equal? (tv-conf (cog-tv e)) mi)) 
         wordpairs))) 
    ; do something with the list of objects that have the 
    ; required confidence (with-confidence) and the list of 
    ; those which don't have the confidence (no-confidence) 
) 
Смежные вопросы