2016-08-20 3 views
1

я могу использовать findf, чтобы найти элементы в списке на основе некоторой процедуры:Найти индексы элементов в списке

(define sl '("tester" "testing" "other words" "for test of")) 
(findf (lambda (x) (string-contains? x "test")) sl) 

Выход:

'("tester" "testing" "for test of") 

Как я могу получить индексы элементов, которые удовлетворяют некоторая процедура, которая возвращает true и false, например «string-contains?» выше ? Я хочу иметь следующий выход в вышеупомянутом случае:

'(0 1 3) 

ответ

2
#lang racket 

(define (find strings needle) 
    (for/list ([s strings] 
      [i (in-naturals)] 
      #:when (string-contains? s needle)) 
    i)) 

(find '("tester" "testing" "other words" "for test of") 
     "test") 
+0

Я хочу иметь функцию, к которой я могу отправить любую функцию, так же, как я могу отправить любую функцию findf. Как я могу это достичь? – rnso

+1

Измените аргумент 'neeedle' на, скажем,' f'. Затем замените тест '(string-contains? S needle)' на другой, который использует 'f'. – soegaard

Смежные вопросы