Как насчет запуска подпрограммы filter
по списку и использования лямбда-объекта, инициализированного информацией о вашем запросе, которая затем будет применяться к списку, пока не найдет совпадение.
Так, например, у вас была бы лямда, которая выглядела бы как
(define (filter-object query)
(define (query-function list-input)
;;do something here for query function that will take the initialized
;;query and match it against the list-input to see if there's a match
;;it should return #t or #f
)
;;the return of the filter-object is the query function
query_function)
;;my-filter-function is initialized with a specific query
(define my-filter-function (filter-object '(a for what)))
Теперь с инициализированной filter-object
запустите фильтр по вашему списку
(define (filter filter-function list-of-lists)
(cond ((eq? list-of-lists '()) '())
((filter-function (car list-of-lists))
(cons (car list-of-lists)
(filter filter-function (cdr list-of-lists)))
(else (filter filter-function (cdr list-of-lists))))
(filter my-filter-function my-list)
Это должно вернуть список совпадений из одного элемента (при условии, что вы не помещаете более одной копии в свой набор списков.
Надеюсь, это поможет,
Jason